Asp.Net MVC部分视图更新问题

时间:2014-06-16 13:45:24

标签: jquery ajax asp.net-mvc-4 asp.net-mvc-partialview

我有一个asp.net mvc应用程序。我正在尝试使用ajax post更新主视图中的局部视图。这是我的javascript代码:

$.ajax({
            url: "Interface/GetErrors?servers=" + serverNames,
            type: "Post",
            dataType: "html",
            async: false,
            success: function (result) {
                $('#errorListDiv').html(result);
            },
            error: function () {
                alert("Error occured");
            }
        });

实际上这个ajax帖子成功获得了部分视图。但我的问题是;部分视图加载后,一些css类,html属性等加载不完整。因为部分视图的某些部分是使用javascript函数排列和创建的。由于这个javascript库在主视图或viewstart中呈现,并且这些库不会使用ajax post呈现,因此我的局部视图加载不完整。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我在评论中提到了一些方法。这是您可能需要的那个:

从原始HTML中提取任何<script>块并使其执行。我相信html()会删除script块。

$.ajax({
    url: "Interface/GetErrors?servers=" + serverNames,
    type: "Post",
    dataType: "html",
    success: function (result) {
        $('#errorListDiv').html(result);
        var re = /<script\b[^>]*>([\s\S]*?)<\/script>/gm;
        var scripts = "";
        var match;
        while (match = re.exec(result)) {
            if (match[1] != "") {
                scripts += match[0];
            }
        }
        // cause the scripts to execute - add them to the panel loaded
        $('#errorListDiv').append(scripts);
    },
    error: function () {
        alert("Error occured");
    }
});

您需要确保部分视图仅包含脚本代码块而不包含脚本文件引用,或者您可以对包含内容进行双重修改。

可能有更好的方法可以做到这一点,但这对我有用,所以我很高兴听到评论。

*注意:请不要使用async: false。它导致任何数量的额外问题,几乎没有什么好处。只需使用提供的异步回调(无论如何)。