私は、このようなアクションメソッドを持っています。検索時にクエリ値を保存する方法は? ASP.NET MVC
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Search(String filter, String value, Int32? page) {
var set = new List<Employee>();
switch(filter) {
case "by-name": {
set = this.repository.Get(
e => (e.LastName + " " + e.FirstName + " " + e.MiddleName) == value
).ToList();
break;
}
case "by-empn": {
set = this.repository.Get(
e => e.EmployeeNumber == value
).ToList();
break;
}
default: return RedirectToAction("Search", "Employee");
}
ViewBag.SearchedEmployees = set.Count();
return View(set.ToPagedList(page ?? 1, PageSize));
}
検索ビューは、このようなものです:
@using(Html.BeginForm("Search", "Employee", FormMethod.Get, new { @class = "search-form" }))
{
<p>
@Html.TextBox("value")
</p>
<p>
@Html.RadioButton("filter", "by-name", true) By name <br/>
@Html.RadioButton("filter", "by-empn") By empn <br/>
</p>
<p>
<input type="image" src="@Url.Content("~/Content/Images/Search.png")" />
</p>
}
問題:
@if(Model.Count > 0) {
foreach(var item in Model) {
Html.RenderPartial("Employee.Card", item);
}
@Html.PagedListPager(
Model,
page => Url.Action("Search", new { page = page }),
new PagedListRenderOptions {
LinkToFirstPageFormat = "<< Beginning",
LinkToPreviousPageFormat = "< Back",
LinkToNextPageFormat = "Forth >",
LinkToLastPageFormat = "End >>"
}
)
}
検索フォームを部分図として提示され:私はN
ページのリンクを持っています。私が第2ページに行くと、無限ループのリダイレクトに直面します。それが私の行動を実装した方法です。デフォルトのケースが発生します。したがって、filter/value
の値は、2回目のアクションコールでnull
ですか?どうして? 検索操作をどのようにリファクタリングするのですか?
また、このようなアクションのルートを設定するにはどうすればよいですか?
ありがとうございます!
routes.MapRoute(
null,
"{controller}/{action}/Page{page}/filter{filter}/val{value}",
new { controller = "Employee", action = "Search" }
);
:
EDIT
だから、検索行動のためのルートは次のようになりますか?
EDIT 2
は、だから、次の書き込みすることが可能である:
page => Url.Action("Search", new { filter = ViewBag.SearchFilter, value = ViewBag.SearchValue, page = page }),
とコントローラ内部:
public ActionResult Search(String filter, String value, Int32? page) {
ViewBag.SearchFilter = filter;
ViewBag.SearchValue = value;
// ...
}
は、この権利ですか?
1)私の編集を見てください。 2)私はTroy Goodeのページネーションリストを使用しています。私はこのようなものを書いた(EDIT 2)。 – lexeme
これは、自分自身でURLを生成し、2つのパラメータを含めるための良い方法のようです。私は 'ViewBag'の代わりに強く型付けされたビューモデルを使用しますが、あなたがそれをより快適に感じるなら、それを使い続けてください。 –
クール!また、私は最初の検索リクエストを作成するときに、このhttp:// localhost:51126/Employee/Search/Page2?value =%D0%A6%D0%A2%D0%94&filter = by-dept&x = 24&y = 13である。そして、「x」と「y」がどこから来たのか分かりません。対応する行動の経路をどうやって結ぶのですか? – lexeme