我的索引控制器加载一个带有 3 个复选框的表单的视图,用于过滤某些表中的数据。在索引视图中,我有:
<div id="ajax-container">
<div id="content-loading"><img src="~/Images/preloader4.gif" /></div>
</div>
@section scripts
{
<script type="text/javascript">
$(document).ready(function () {
$("#filter-form").trigger("submit");
});
</script>
}
也就是说,在页面加载时,我使用默认值提交表单。这会在我的控制器中调用一个返回部分视图的方法,如下所示:
<table id="summaryTable">
<tr>
<th>Column1</th>
<th>Column2</th>
<th>Column3</th>
</tr>
<tr>
<td>Column1</td>
<td>Column2</td>
<td>Column3</td>
</tr>
</table>
在初始页面加载时,这有效。在每次后续提交表单时,视图永远不会更新。返回局部视图的方法确实被调用并且它确实返回了 PartialView() 但它没有更新。
在尝试在 document.ready 上实现 AJAX 调用之前,这一切都在工作。不同之处在于索引视图的第一次加载称为 @Html.Partial("_summaryTable", Model) (现在是 ajax-container div 所在的位置),并且整个内容<div id="ajax-container">
都在部分视图中,包装了表格。
编辑
Ajax 调用是:
$(function () {
var ajaxFormSubmit = function () {
var $form = $(this);
$("#content-loading").show();
var options = {
url: $form.attr("action"),
type: $form.attr("method"),
data: $form.serialize()
};
$.ajax(options).done(function (data) {
var $target = $($form.attr("data-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
$("#content-loading").hide();
});
return false;
};