【问题标题】:jQuery - dynamically loading ASP.NET partial view into modaljQuery - 将 ASP.NET 部分视图动态加载到模式中
【发布时间】:2015-01-22 14:31:09
【问题描述】:

问题背景:

我有一个 MVC 项目,我试图在其中创建部分视图 modal 内容,然后将其连接到其各自的其余 modal 标记,然后最后附加到“主”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 &lt; 的错误,这是由部分视图的 HTML 标记引起的,如图所示:

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

我怎样才能成功地转义这个正斜杠,以便我的局部视图中的 HTML 正确地添加到动态添加的标记的其余部分?

【问题讨论】:

  • 尝试使用$('@Html.Partial("../Modal/Index", new { id = 1 })')等引号

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


【解决方案1】:

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

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

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

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

我以前使用过这种技术来加载模态,并且效果很好。然而,这样做的一个问题是$.get() 是一个async 调用,所以.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");
});

【讨论】:

  • 很棒的例子谢谢。我遇到的唯一问题是我需要用append 替换.replaceWith。未能做到这一点导致我的模态弹出窗口出现在背景后面。非常感谢!
  • 干杯。时间还早,我的大脑还没有完全工作。 .html() 应该是调用,因为这将用您抓取的新内容替换任何现有内容。
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 2018-12-19
  • 2013-05-11
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2019-11-16
  • 2012-05-30
相关资源
最近更新 更多