如果InsertionMode是InsertBefore或InsertAfter,为什么Ajax.BeginForm不会在回调中执行javascript代码?

时间:2015-09-07 13:51:20

标签: asp.net-mvc asp.net-ajax ajax.beginform

使用Ajax.BeginForm时,如果InsertionMode设置为Replace,则当MVC视图返回包含一些javascript代码的PartialView时,代码将被执行。

但当InsertionModeInsertAfterInsertBefore时,脚本不会被执行。

是否按设计?还是个bug?

以下是代码:

 <h2>Ajax Form Call action</h2>
 @using (Ajax.BeginForm("PartialDisplay", "Test",
 new AjaxOptions
 {
     HttpMethod = "POST",
     InsertionMode = InsertionMode.InsertAfter,
     UpdateTargetId = "PartialResult"
 }))
 {
     <input type="submit" value="Go" />
 }

<div id="PartialResult"></div>

PartialView的代码:

<p>Partial view</p>

<script>
    alert('executed script!');
</script>

我尝试了一个简单的ajax调用,但它适用于insertBeforeReplace(有点&#39;替换&#39;):

function DisplayPartial() {
    // call action
    $.ajax({
        url: '/Test/PartialDisplay',
        dataType: "html", // expected response datatype
        type: "POST",
        success: function (data) {

            $(data).insertBefore($('#PartialResult')); // insertBefore (Works)
            $('#PartialResult').html(data);            // sort of "Replace" (Works too)
        },
        error: function (xhr) {
            alert('error:' + xhr.error);
        }
    });
}

我已经完成了其他一些尝试,这里有一个表格,显示js代码何时执行,何时不执行:

"Way to fill a div                               |  is JS executed?
--------------------------------------------------------------
Ajax.BeginForm   InsertionMode.Replace             Yes
Ajax.BeginForm   InsertionMode.InsertAfter         No
Ajax.BeginForm   InsertionMode.InsertBefore        No

jQuery           .insertBefore                     Yes
jQuery           .insertAfter                      Yes
jQuery           .prepend                          Yes
jQuery           .append                           Yes
jQuery           .html (replace)                   Yes

Vanilla JS       .innerHTML                        No
Vanilla JS       .outerHTML                        No

0 个答案:

没有答案