我在一个带有ajax形式的局部视图中遇到了一个奇怪的问题。它只能运行一次,但是之后,控制器至少认为它可以正常工作,但是即使至少控制器中的数据实际上具有更新的模型,部分视图内容也不会更新。
我不知道该怎么办。
它与div有关吗?用div代替数据是在局部视图之外吗?
我是否应该不使用ajax表单,而仅使用jquery向控制器发出ajax请求?
所以我的视图中有此表单(无论是在我的视图中还是部分视图中都没有关系),还有一个保存部分视图中html的div
@using (Ajax.BeginForm("ChangePage", "Staging", null, new AjaxOptions { HttpMethod = "post", InsertionMode = InsertionMode.ReplaceWith, UpdateTargetId = "divResults", OnBegin = "showLoading", OnComplete = "hideLoading" }, new { id = "frmPage" }))
{
<input type="hidden" id="pageDir" name="pageDir" />
<input type="hidden" id="codeFilter" name="codeFilter" />
<input type="hidden" id="glauFilter" name="glauFilter" />
<input type="hidden" id="gacctnoFilter" name="gacctnoFilter" />
<input type="hidden" id="glcoFilter" name="glcoFilter" />
<input type="hidden" id="employeeFilter" name="employeeFilter" />
<input type="hidden" id="maxPages" name="maxPages" />
<input type="hidden" id="page" name="page" />
}
<div id="divResults" name="divResults">
@Html.Partial("~/Views/Staging/_stagingResults.cshtml", Model)
</div>
我有JS可以在部分视图中提交表单。所有这些都很好。我可以单击按钮,控制器被隐藏,生成我的新模型,部分视图生成HTML,并且仅在第一次显示在divResults中。
进行任何其他页面更改都可以完成上述所有操作,但不会将新的HTML放入divResults中。在chrome的开发控制台中,我可以看到新请求发出并以正确的HTML返回,但从未被替换。
答案 0 :(得分:0)
您可以在AJAX的begin()方法的开始表单属性上添加一个javascript函数,该表单属性将在您的ajax请求完全加载后触发
@using (Ajax.BeginForm("AjaxOptionPostData", "Home", new AjaxOptions { HttpMethod = "POST", OnSuccess = "OnSuccess" }))
这里OnSuccess将是您的javascript方法
function OnSuccess()
{
//You can do your stuff here
}