我有一个 Html 下拉列表,允许用户拥有网格的页面大小。
@Html.DropDownList("PageSizes", Model.PageSizes)
然后我有一个javascript块:
<script type="text/javascript">
function ChangePageSize(size, msg) {
alert("alert inside ChangePageSize: " + msg + " " + size); //msg = from: Initial; first dropdown change (grid updates with new page size)
//msg = from: Initial; second dropdown change (alert pops twice, grid does not update)
var filterPage = "/Search/Filter";
$.ajax({
cache: false,
url: filterPage,
data: { pagesize: size },
type: 'GET',
success: function (data) {
alert("success" + data); //this alert pops twice on the second dropdown change as well, data does have html in it.
$('#searchResults').replaceWith(data);
},
error: function () { alert('Error changing page size.'); }
});
}
$(function() {
$('body').on('change', '#PageSizes', function() {
var size = this.value;
if (size != 'undefined') ChangePageSize(size, "from: Initial");
});
});
</script>
这只能工作一次。我也尝试过使用 bind() 和 live()。有谁知道如何正确重新绑定到更改事件?
更新:按照建议修改了 javascript 并添加了一些调试警报。该函数似乎再次与事件绑定,并且控制器操作似乎正在返回部分视图。但是为什么我的#searchResults DIV 没有再次更新?为什么 ChangePageSize 函数会被调用两次?
Update2:我找出了我的网格没有填充的原因。指定要替换的 DIV 在被替换后就消失了。我交叉手指,用同名的 DIV 围绕局部视图中的表格,并希望找到正确的 DIV 来替换。
所以这现在正在工作。我仍然担心该函数被多次调用,我猜这也会多次访问服务器。为什么会这样?