jQuery - 动态地将ASP.NET局部视图加载到模态中

时间:2015-01-22 14:31:10

标签: javascript jquery html asp.net-mvc-4

问题背景:

我有一个MVC项目,我试图创建一个部分视图modal内容,然后将其连接到其各自的modal标记的其余部分,然后最终附加到' main& #39; modal div。

代码

主模式div:

<div class="modal fade" 
     id="basicModal" 
     tabindex="-1" 
     role="dialog" 
     aria-labelledby="basicModal" 
     aria-hidden="true">
</div>

JQuery触发模态弹出窗口以及AddModal方法来构建模态内容:

<script>
$(document).ready(function () {
    $(".btn").click(function () {

        AddModal();

        $("#basicModal").modal("show");
    });
});
</script>
构建模态的

AddModal方法:

AddModal = function() {

var partialHtml = $(@Html.Partial("../Modal/Index", new { id = 1 }))

    $html = $('<div class="modal-dialog">' +
    '<div class="modal-content">' +
        '<div class="modal-header">' +
            '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button>' +
            '<h4 class="modal-title" id="myModalLabel">Modal title</h4>' +
        '</div>' +
        '<div class="modal-body">'+partialHtml+'</div>' +
        '<div class="modal-footer">' +
            '<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>' +
            '<button type="button" class="btn btn-primary">Save changes</button>' +
        '</div>' +
    '</div>' +
    '</div>');

    $("#basicModal").append($html);
};

部分视图:

<h4>Test Partial view</h4>

问题:

我遇到了Uncaught SyntaxError: Unexpected token <的错误,这是由部分视图的HTML标记引起的,如下所示:

var partialHtml = $(<h4>Test Partial view</h4>)

如何成功转义此正斜杠,以便将部分视图中的HTML正确添加到动态添加的标记的其余部分?

1 个答案:

答案 0 :(得分:2)

请考虑使用此技术,而不是使用Html.Partial()并将其存储在JavaScript字符串中:Render Partial View Using jQuery in ASP.NET MVC

基本上,在AddModal()方法中,触发一个GET请求,该请求命中一个将部分视图作为HTML返回的操作。然后,只需用返回的HTML替换#basicModal的内容:

AddModal = function() {
    var partialHtml;
    var url = '../Modal/Index?id=1';

    $.get(url, function(data) {
        $("#basicModal").html(data);
    });
};

我之前使用过这种技术加载模态并且效果很好。但是,这样做的一个问题是$.get()异步调用,因此.modal("show")可能会在获取数据之前触发。我们可以通过AddModal返回$.get()生成的承诺来解决这个问题:

AddModal = function() {
    var partialHtml;
    var url = '../Modal/Index?id=1';

    return $.get(url, function(data) {
        $("#basicModal").html(data);
    });
};

然后你会将你的主叫线改为:

AddModal().done(function() {
    $("#basicModal").modal("show");
});