【发布时间】:2013-05-05 06:47:32
【问题描述】:
我正在学习 MVC,对此感到困惑。我正在尝试将一些获取数据并将其显示在 WebGrid 中的通用代码分解为可以在多个页面上使用的局部视图。
我的 home 控制器 Index 方法只是返回 View()。主页视图如下所示:
@using (Ajax.BeginForm("SearchAction", "Search",
new AjaxOptions { UpdateTargetId = "data-grid", HttpMethod = "Post" }))
{
@Html.TextBoxFor(model => model.name)
<input type="submit" value="Search" />
}
@{
<div id="data-grid">
@Html.Partial("SearchResults", Model)
</div>
}
我正在尝试使用 Ajax 来避免在单击 WebGrid 分页器链接时丢失我的搜索表单数据,这些链接呈现为普通链接。
我的 SearchController 如下所示:
public ActionResult SearchAction(string name)
{
return RedirectToAction("SearchResults", new { name = name });
}
public ActionResult SearchResults(string name)
{
//does database query and sticks results in the viewbag
//filter on optional name parameter
VieweBag.Members = MyQueryResults;
return PartialView();
}
我的 SearchResults 共享视图,数据通过 ViewBag.Members 传入:
@{
var grid = new WebGrid(null, rowsPerPage: ViewBag.Pagesize);
grid.Bind(ViewBag.Members);
@grid.GetHtml(// etc. etc.)
}
我得到的结果是 ViewBag.Pagesize 和 ViewBag.Members 绑定失败,因为 viewbag 中没有数据。显然,我的部分控制器没有被调用来执行初始查询并将内容放入第一次加载主页时的 ViewBag 中。我该如何做到这一点?
另一个奇怪的事情是,如果我只是将数据库查询代码复制到我的家庭控制器(它原来所在的位置)以强制执行原始查询,那么如果我将一些文本放入搜索字段并进行搜索,部分视图在新页面上自行呈现。为什么会这样,我以为它只会作为我主页的一部分呈现。
我从不同的答案/地方拼凑出这个部分观点,毫无疑问,我遇到了可怕的错误:\
【问题讨论】:
标签: asp.net-mvc-4