我在MVC4中使用WebGrid有一个简单的问题(可能不是一个简单的答案!)。
我有一个像这样的功能网格
<div id="Submitted">
@Html.Grid(
Model.Submitted, displayHeader: false, fieldNamePrefix: "Submitted_", ajaxUpdateContainerId: "Submitted",
columns: new WebGridColumn[]{
new WebGridColumn(){ ColumnName = "Date",Header = "Date",Style = "",CanSort = false,Format = x => x.Date.ToString(Globals.Default.DATEFORMAT) },
new WebGridColumn(){ ColumnName = "ID",Header = "Review",Style = "", CanSort = false, Format = x=>@Html.ActionLink("Review","Review","Company",new{ID = x.ID },new{}) }
})
</div>
当单击下一页按钮时,使用Ajax重新加载“已提交”div时,它会生成下一页正常 - 但它将转到控制器上的原始操作,该操作应为整页。
如何过滤网格本身以外的所有内容?用一些聪明的C#代码或jQuery?
编辑: 为了澄清,我不是要问如何更好地进行分页,或者我自己,只要我担心webgrid的默认分页工作完全正常 - 我问的是WebGrid如何做ajax分页时回发给返回FULL页面的动作。
答案 0 :(得分:2)
它使用jquery load()和允许它仅选择相关传入节点的功能来实现此目的。这取自http://msdn.microsoft.com/en-us/magazine/hh288075.aspx
为了允许脚本仅应用于WebGrid,它使用jQuery选择器来标识具有ajaxGrid类集的元素。该脚本使用jQuery live方法(api.jquery.com/live)为排序和分页链接(通过网格容器内的表头或页脚标识)建立单击处理程序。这为匹配选择器的现有和未来元素设置事件处理程序,这很方便,因为脚本将替换内容。
答案 1 :(得分:0)
您应该将网格放在partialview中并通过Ajax更新它。在控制器中,您应该找到请求的类型。如果是ajax请求(通过Request.IsAjaxRequest()),则必须返回partialview,否则必须返回原始视图。
如果您使用的是ajax.beginform,则必须执行以下操作:
@using (Ajax.BeginForm("Index", new AjaxOptions { OnFailure = "searchFailed", HttpMethod = "POST", UpdateTargetId = "Submitted" }))
{
...
}
<div id="Submitted">
@Html.Partial("_partialviewname", Model)
</div>
RN 并在控制器中:
public ActionResult Index(int? page)
{
...
if (Request.IsAjaxRequest())
{
return PartialView("_partialviewname", db.model)
}
return View(db.model)
}