【发布时间】:2013-04-13 23:43:39
【问题描述】:
我刚刚在我的 MVC 4 应用程序中使用 PagedList 实现了分页。我的应用程序的主页包含一个部分视图,显示有关某些对象的汇总数据列表。每个列表项旁边都有一个按钮,单击该按钮会启动一个模式窗口,显示有关该特定列表项的更多信息。
在列表项的第一个“分页”页面上一切正常,但是如果我导航到第二个“分页”页面并单击按钮启动模式,则没有任何反应。从 Chrome 中的开发人员工具中,我得到了Uncaught TypeError: Object [object Object] has no method 'modal'。
有问题的部分输出列表,包含模式的 DIV 和一个用于处理启动模式窗口的按钮单击事件的 JS 函数。这是部分视图中的 JS:
<script type="text/javascript">
$(document).ready(function () {
$('.show-modal').click(function () {
var url = $('#modal-view-property-from-get-all').attr('data-url');
var id = $(this).attr('data-id');
$.get(url + '/' + id, function (data) {
$('#view-property-from-get-all-container').html(data);
$('#modal-view-property-from-get-all').modal('show');
});
});
});
</script>
当我导航回第一个“分页”页面时,按钮也不会触发,并且会抛出相同的未捕获 typeError。我使用的另一个截断多行文本的 jQuery 插件也停止工作,并且文本溢出其包含的 DIV。
- 这里实际发生了什么 - 为什么使用分页会像这样干扰 JS?
- 我该如何解决这个问题?
编辑:
特定类型的所有记录都从控制器操作返回:
return PartialView("_GetAllPropertiesPartial", model.ToPagedList(pageNumber, pageSize));
由于是局部的,分页导航由Ajax.ActionLinks()处理:
@Ajax.ActionLink("<<", "GetAllProperties", new { page = 1 }, new AjaxOptions { UpdateTargetId = "quick-property-search-results" })
【问题讨论】:
-
当您导航到第二个页面时,是否有加载此页面的 Ajax 请求?还是在第一页渲染时加载所有内容,然后在客户端分页?
-
是的,Ajax.ActionLink 处理导航,因为我使用的是局部视图。请参阅编辑。
-
$('.show-modal') 事件处理程序仅绑定在 document.ready 上,这意味着此后创建的任何 dom 元素(例如在第二页上创建的元素) ) 不会有那种约束力。尝试使用 .live('click', function) 而不是 .click(function)
-
我正在使用 jQuery 1.9.1,我得到“对象没有实时方法”。它已从 1.9+ 中完全删除。我试过 .bind() 和 .on(),还是不高兴。
-
抱歉,最新的 jQuery 版本改变了方法! .on() 应该可以工作。看看@Tieson 的回答。如果您仍然遇到问题,请尝试设置一个 jsfiddle,以便我们查看它
标签: c# jquery asp.net-mvc razor asp.net-mvc-4