在局部 View 中,我正在使用 MVCs 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"被答案(再次部分 View )替换。但是,div "divToReplace"的内部 html 被替换为答案,因此部分 View 的开头如下所示:
<div id="divToReplace"> 
    <div id="divToReplace"> 
           ... 

我究竟做错了什么?

请您参考如下方法:

好吧,一段时间后,我遇到了同样的问题,现在我想说清楚,所以我查看了 jquery.unobtrusive-ajax.js 和 responsable 函数:

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,而是用答案替换了它的内容。现在我采用答案的内部部分,一切正常!


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!