MVC局部视图中包含的Javascript仅在第一次

时间:2017-02-07 21:26:15

标签: javascript ajax asp.net-mvc

我有一个按钮,用于通过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中找到目标?...但我真的不知道如何继续......

非常感谢

1 个答案:

答案 0 :(得分:0)

一种可能性是您的部分视图包含与“主视图”中相同的jQuery或其他javascript包。一旦它们首次渲染,您将拥有两个这样的集合(一个来自主视图,一个来自局部视图)。确保您的网页上只有一个捆绑包,而不是重复捆绑包。

这发生在我身上。

P.S:这是一种可能性!我不是说这是唯一的原因。我只是觉得这可能是一种可能性