在_Layout.cshtml中:
@RenderBody()
@Scripts.Render("~/scripts/jquery.unobtrusive-ajax.js")
运行脚本会激活index.cshtml中的所有@ Ajax.ActionLink。 一些ajax动作链接通过ajax加载局部视图,这些部分视图包含更多ajax动作链接。这些新的ajax操作链接未激活,因为jquery.unobtrusive-ajax.js在它们出现在页面之前就已运行。
我的解决方案是在部分视图上再次运行脚本。
在_PartialView.cshtml中:
@Scripts.Render("~/scripts/jquery.unobtrusive-ajax.js")
然而,这会导致index.cshtml中的@ Ajax.ActionLink第二次激活。如果我点击这些ajax动作链接中的任何一个,它们的相应动作就会运行两次。
如何在不重新激活现有ajax操作链接的情况下在部分视图中激活新的ajax操作链接?
答案 0 :(得分:4)
除非您使用的是jquery.unobtrusive-ajax.js
脚本的一些非常旧版本,否则您所描述的内容并非如此。这不应该是这种情况的原因是因为ASP.NET MVC 4附带的jquery.unobtrusive-ajax.js
使用jQuery .delegate
或者在最新版本中使用.on()
函数来订阅click
元素的Ajax.*
个事件。这意味着即使对于最初不存在于DOM中但稍后使用AJAX调用加载的元素,也会执行单击处理程序。
在最新版本中,它使用.on
方法:
$(document).on("click", "a[data-ajax=true]", function (evt) {
evt.preventDefault();
asyncRequest(this, {
url: this.href,
type: "GET",
data: []
});
});
注意它如何以生动的方式订阅.click事件给具有data-ajax="true"
属性的所有锚点。即使对于稍后添加到DOM中的锚点,它也会这样做。