我正在尝试使用Ajax.BeginRouteForm
来创建可以分页和搜索的结果列表。一般的想法是,视图顶部的菜单和布局不会被重绘,但搜索结果的中心区域会被重绘。
所以我有两个控制器操作,一个 GET,它返回一个初始模型和视图,一个 POST,它获取模型,从中获取页面/搜索信息,然后运行搜索,返回相同的模型和视图。
我看到的是 POST 工作,获得新结果,并且视图正在使用这些新结果进行编译(调试代码告诉我这一点),但客户端表单没有被重绘。
当我添加 InsertionMode 和 UpdateTargetId 参数时,我遇到了视图内视图问题,其中整个菜单都在窗体区域内呈现。
@using (Ajax.BeginRouteForm(ContentRoutes.EmailContentList,
new { instance = UserContext.InstanceId },
new AjaxOptions
{
HttpMethod = "POST",
OnBegin = "blockForm();",
OnComplete = "unblockForm();",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "frmContent"
},
new { id = "frmContent" }))
{
你应该有一个外部div,ID
frmContent
包含以下形式
<div id="frmContent">
@using (Ajax.BeginRouteForm(ContentRoutes.EmailContentList,
new { instance = UserContext.InstanceId },
new AjaxOptions
{
HttpMethod = "POST",
OnBegin = "blockForm();",
OnComplete = "unblockForm();",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "frmContent"
}
}
</div>
这是因为您要将 AJAX 调用的结果添加到 frmContent HTML 元素。
此外,还应确保 AJAX 实际工作:在操作中使用if (Request.IsAjaxRequest())
并使用调试器检查其值。