使用Ajax.BeginForm
时,如果InsertionMode
设置为Replace
,则当MVC视图返回包含一些javascript代码的PartialView时,代码将被执行。
但当InsertionMode
为InsertAfter
或InsertBefore
时,脚本不会被执行。
是否按设计?还是个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调用,但它适用于insertBefore
和Replace
(有点&#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