【问题标题】:Return View as a Modal以模态形式返回视图
【发布时间】:2016-08-30 12:48:05
【问题描述】:

我正在尝试从前一个模态的控制器发布操作中返回一个模态。我遇到的问题是部分视图没有呈现为模态。我能找到的所有文档都是指从按钮打开模式,但是我的模式是有条件的,所以我希望控制器处理是否加载模式/要加载哪个模式

部分视图的一部分,我返回包含模式的视图

return PartialView("_AccountUpdateSuccess");

我的观点

<div class="modal fade" tabindex="-1" role="dialog" id="updateSuccess">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title">Success!</h4>
            </div>
            <div class="modal-body">
                <p class="text-success">@ViewBag.Account has been updated successfully!</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div><!-- /.modal-content -->
    </div><!-- /.modal-dialog -->
</div><!-- /.modal -->


<script type="text/javascript">
    $(document)
        .ready(function() {
            $("#updateSuccess").modal('show');
        });
</script>

【问题讨论】:

  • 我遇到的问题是局部视图没有呈现为模态 ....它是如何呈现的?
  • 它看起来像是一种模态但没有弹出窗口。只是一个带有文本/表单但格式不正确的白屏
  • 我觉得这篇文章对你有帮助:stackoverflow.com/questions/11231862/…
  • 你如何处理客户端的控制器响应?
  • 我的视图中有一个小脚本标签来呈现模式。这似乎在返回视图时有效,但在返回部分 &lt;script type="text/javascript"&gt; $(document) .ready(function() { $("#updateSuccess").modal('show'); }); &lt;/script&gt; 时无效

标签: javascript jquery asp.net-mvc twitter-bootstrap asp.net-mvc-4


【解决方案1】:

您必须将 javascript 添加到 parent 视图中,作为 ajax 函数的回调,而不是在局部视图中。原因是 ajax 调用添加的脚本标签不会自动运行。

【讨论】:

  • 如何在不使用点击事件的情况下从父级触发显示?
  • 你仍然可以使用点击,你必须简单地将它绑定更高一级,使用类似 $("body").on(".selector", "click", function() {
  • 我实际上不会使用正文,但页面上已经有最接近的元素。阅读 on 功能:api.jquery.com/on
  • 我不想通过点击事件来实现。我想通过成功提交来完成。所以我的提交将击中控制器。控制器将检查一些值,如果成功加载成功模式,否则使用验证消息重新加载当前模式
  • 在这种情况下,请参阅 Javiers 回答,它会显示一个 ajax 调用。其中一个参数称为成功,这是一个在提交后调用的函数。这就是我最初所说的“回调”的意思,因为在提交发生后它会“回调”您提供的此功能
【解决方案2】:

我这样做的方法是将响应插入到一个空的 div 中,您可以将它放在其中,例如,在共享布局的底部。我在返回PartialView 时使用此方法,没有任何问题。

然后我使用这个脚本来加载一个模态:

$.ajax({
    type: "POST",
    url: "/Controller/ActionWhichReturnsAPartialView",
    success: function (data) {
        $(".modal-backdrop").remove(); // I have to do this hack just in case of a modal calling another modal and to avoid some display issues with the overlayed background
        $("#temp").html(data); // #temp is the empty div
        $("#myModal").modal("show"); // myModal is the root div id of the html result
    }

【讨论】:

  • 如果 ajax 调用在父页面而不是部分页面中,这将起作用,这似乎是 OP 问题
猜你喜欢
  • 2020-06-29
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2011-08-16
  • 2020-12-27
  • 1970-01-01
相关资源
最近更新 更多