在局部视图中,我使用MVC Ajax.Beginform,如下所示:
<div id="divToReplace"> @using (Ajax.BeginForm("Action","Controller,new AjaxOptions { InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,UpdateTargetId = "divToReplace" },new { id = "formID" })) { ... </div>
提交表单时,我希望孔div“divToReplace”被答案替换(部分视图再次).但相反,div“divToReplace”的内部html被答案所取代,因此部分视图的开头如下所示:
<div id="divToReplace"> <div id="divToReplace"> ...
我究竟做错了什么?
解决方法
好吧,经过一段时间后,我遇到了同样的问题,现在我想说清楚所以我看了一下jquery.unobtrusive-ajax.js和责任函数:
function asyncOnSuccess(element,data,contentType) { var mode; if (contentType.indexOf("application/x-javascript") !== -1) { // jQuery already executes JavaScript for us return; } mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase(); $(element.getAttribute("data-ajax-update")).each(function (i,update) { var top; switch (mode) { case "BEFORE": top = update.firstChild; $("<div />").html(data).contents().each(function () { update.insertBefore(this,top); }); break; case "AFTER": $("<div />").html(data).contents().each(function () { update.appendChild(this); }); break; default: // Changed this line because of generating duplicate IDs //$(update).html(data); $(update).html($(data).html()); break; } }); }
正如您在默认部分中看到的那样,答案并非替换updatetargetid,而是将其内容替换为答案.现在我采取答案的内在部分,一切正常!