【发布时间】:2015-06-10 12:38:20
【问题描述】:
我有一个 Search.cshtml 视图,看起来像这样:
@model IEnumerable<MVC.Models.Books>
@using (Html.BeginForm())
{
@Html.DropDownList("Categorie", ViewBag.Categorie as SelectList);
@Html.TextBox("Query");
<input type="submit" value="Search" />
}
@if (this.Model.Any())
{
var grid = new WebGrid(Model, rowsPerPage:20);
@grid.GetHtml(mode: WebGridPagerModes.All,
columns: grid.Columns(
grid.Column(columnName: "Number"),
grid.Column(columnName: "Title"),
grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.Nummer })),
grid.Column(format: (item) => Html.ActionLink("Details", "Details", new { id = item.Nummer })),
grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", new { id = item.Nummer }))
)
)
}
我的控制器有以下方法:
public ActionResult Search()
{
ViewBag.Categorie= new SelectList(new[] { "Number", "Title"});
IEnumerable<Books> model = new List<Books>();
return View(model);
}
[HttpPost]
public ActionResult Search(string categorie, string query)
{
ViewBag.Categorie= new SelectList(new[] { "Number", "Title"});
IEnumerable<Books> model;
switch (categorie)
{
case "Number":
int qnumber = Convert.ToInt32(query);
model = _db.Books.Where(b => b.Number == qnumber)
.OrderBy(b => b.Number).ToList();
break;
default:
model = _db.Books.Where(b => b.Title.Contains(query))
.OrderBy(b => b.Title).ToList();
break;
}
return View(model);
}
一切正常。但是列和分页链接的排序不起作用。如果单击其中一个,视图会重新加载,而 Grid 中没有数据。
有没有办法让 WebGrid 在这个 Search-View 中工作?
【问题讨论】:
-
尝试在 Search in action name 中放置一个调试器,并检查
query在您输入一些文本并点击提交按钮时是否有任何值。 -
query有一个值。我知道问题出在哪里。如果我搜索(例如)带有“ab”的标题,我会得到标题包含“ab”的所有书籍对象。在 WebGrid 上,我正确地得到了前 20 个结果。但是,如果我单击(例如)下一页的链接,我会进入public ActionResult Search()函数,其中模型会被IEnumerable<Books> model = new List<Books>();覆盖知道如何解决这个问题吗?
标签: asp.net-mvc asp.net-mvc-3 webgrid