我最近注意到 MVCAjax.BeginForm
在返回视图时表现得很奇怪。起初一切看起来都很好,但后来我意识到在 document ready 中发生的所有绑定都丢失了。文档就绪未执行。
知道这在其他地方也有效,我发现用 jquery get 做同样的事情确实可以执行文档。但据我了解,这两种方法基本上是在做同样的事情。我的快速解决方法是去掉助手的 Replace TargetId 实现并使用它AjaxOptions.OnSuccess
来调用我的jquery.get()
实现。
但是为什么在我使用时 document ready 会触发jquery.get()
,而不是在我使用Ajax.BeginForm
替换 a时会触发div
?
// This method returns a the partial view from DoSomething, but DOES NOT execute the
// partial view's document.ready
using (Ajax.BeginForm("DoSomething", "Somewhere", new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "demo" }))
{ %>
<div id="demo"></div>
<% } %>
示例 1. 用于替换 div 的 MVC Helper 方法
// This method returns nothing from DoSomething, calls getSomething onSuccess and DOES
// execute the partial view's document.ready
using (Ajax.BeginForm("DoSomething", "Somewhere", new AjaxOptions { HttpMethod = "Post", OnSuccess = "function() { getSomething(); }" }))
{ %>
<div id="demo"></div>
<% } %>
// this being the simplified js function
function getSomething(){
var $targetDiv = $("#demo");
var url = "<%: Url.Action("LoadSomething", "Somewhere") %>";
$.get(url, { }, function (result) { $targetDiv.html(result) });
});
示例 2. jquery.get() 替换 div 的方法