我在其他 View 模型中使用小模型的部分 View 。因此,我通过从包装器表单中获取模型数据并使用 serializeArray()
来发送它的更改。然后从操作返回 PartialViewResult
,最后通过返回的结果填充部分 View div 容器。这是我的代码:
var modelStr = $("#[wrapperFormName]").serializeArray();
$.ajax({
type: "POST",
url: targetUrl,
cache: false,
data: modelStr,
success: function (sucResult) {
$('#pa_Cnt').html(sucResult);
},
fail: function (result) {
alert("Fail");
}
});
并在 View 中渲染部分 View ,如下所示:
@using (Html.BeginForm("[ActionName]", "[CtrlName]", FormMethod.Post, new { id = "[wrapperFormName]", @enctype = "multipart/form-data" }))
{
<div id="[partialcontainerName]">
@Html.Partial("[partialViewName]", [partialViewModelName])
</div>
}
问题之一是更新部分 View 并返回结果后,任何绑定(bind)到部分内部元素的 jQuery 事件处理程序都不起作用,我知道事件处理程序必须在主视图中声明,而不是在部分 View 中声明,并且必须委托(delegate)处理程序。
第二个问题是更新结果具有新值,但部分 View 中的某些元素显示旧值,并且我使用 [OutputCache(Duration = 0)]
将 ajax 缓存设置为 false 作为操作缓存。
我很困惑。谁能帮帮我。
最佳答案
您的第一个问题是因为您必须重新添加事件处理程序。我假设您正在 $(document).ready
中添加事件处理程序或页面加载时的等效内容。使用 $.ajax 刷新部分后,具有事件处理程序的原始元素不再存在 - 它们的实例已被替换,因此事件处理程序不会触发。您需要重新添加事件处理程序作为 success
的一部分行后回调:
$('#pa_Cnt').html(sucResult);
不确定第二个问题..
关于c# - 使用 jQuery 发送部分 View 模型和更新部分 View 存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23033242/