我有一个按钮,用于通过jquery ajax调用加载局部视图,成功后,只需用返回的json字符串替换div holder。
部分视图包含一些javascript和html标记。我必须设置jquery.ajax dataType:“html”,以便在加载时在部分视图中执行javascript。
在父视图中:
$("#test2Div").on("click", function () {
$.ajax({
type: "POST",
url: '@Url.Action("GetMainSolution", "Solutions")',
data: { IdEjercicioSolucion: 9 },
cache: false,
dataType: "html",
success: function (response) {
$("#placeHolder").html(response.ViewContent);
}
});
});
问题是,这在我第一次加载局部视图时才能正常工作。一旦它第一次执行,似乎正在渲染的局部视图中包含的那些javascript不再被执行或者在DOM中遗漏了某些东西。如果我刷新整个页面,使用F5并再次加载局部视图,它将首次再次运行。
请,任何想法?
编辑1:添加更多示例代码:
父视图:这是主视图。它显示另一个局部视图,其中包含一些字段和一个按钮。单击该按钮可调用UpdateChViewerLayoutForm函数,该函数将以下部分视图加载到aqviewerholder div中。
<div id="dvContainer">
<div class="container">
<div class="row">
@Html.Partial("SolutionsCursoSelectedPartial", Model)
</div>
<div class="row">
<div id="aqviewerholder"></div>
</div>
</div>
</div>
<script type="text/javascript">
function UpdateChViewerLayoutForm(s, e) {
$.ajax({
type: "POST",
url: '@Url.Action("GetSolucionsAQV", "Solutions")',
data: { IdES: s.GetValue() },
success: function (response) {
$("#aqviewerholder").html(response.ViewContent);
}
});
}
</script>
部分视图(SolutionsAQv):
@Code
If Model IsNot Nothing Then
@Html.Raw(Model.TextoHTML)
End If
End Code
<script src="~/Content/AQv/rm.js" type="text/javascript"></script>
<script src="~/Content/AQv/bm.js" type="text/javascript"></script>
<script src="~/Content/AQv/nn.js" type="text/javascript"></script>
请注意,传递给模型的内容需要使用部分视图中的脚本进行解析。
这在第一次加载时正常工作,但在下面的加载中没有。如果刷新整个页面,它会再次起作用。
我想这可能与通过ajax的partials视图不执行javascript这一事实有关?或者javascript在以下情况下没有在DOM中找到目标?...但我真的不知道如何继续......
非常感谢
答案 0 :(得分:0)
一种可能性是您的部分视图包含与“主视图”中相同的jQuery或其他javascript包。一旦它们首次渲染,您将拥有两个这样的集合(一个来自主视图,一个来自局部视图)。确保您的网页上只有一个捆绑包,而不是重复捆绑包。
这发生在我身上。
P.S:这是一种可能性!我不是说这是唯一的原因。我只是觉得这可能是一种可能性