【问题标题】:Bootstrap modal: load data for supplied ID引导模式:为提供的 ID 加载数据
【发布时间】:2012-05-23 22:11:45
【问题描述】:

我有一个Bootstrap modal,可以从不同的超链接启动,每个超链接提供另一个 ID。

但我想要的是,每次启动模式时,都会填充传递给模式的 ID 的数据。这是(简化的)代码(请参阅代码中的 cmets 进行解释):

@model ViewModels.BookcaseItem.EditBookcaseItemViewModel

<div class="modal hide modal-large" id="editBookDialog">
    @using (Html.BeginForm("Edit", "Bookcase", FormMethod.Post, new { @class = "form-horizontal" }))
    {
        <!-- this is where the ID will be passed to -->
        @Html.HiddenFor(x => x.Id)

        <div class="modal-body">
            <!-- there's actually a couple of editors and labels here, but that doesn't really matter -->
            @Html.EditorFor(x => x.Bla)
        </div>
        <div class="modal-footer">
            <a href="#" class="btn" data-dismiss="modal">Close</a>
            <input type="submit" value="Save" class="btn btn-primary" />
        </div>
    }
</div>

这是用于启动模式并将 ID 传递给它的超链接之一:

<a href="#editBookDialog" data-toggle="modal" data-id="@bookcaseItem.Id" title="Edit this item" class="open-EditBookDialog"></a>

最后但并非最不重要的是实际传递 ID 的 JQuery 部分:

$(document).on("click", ".open-EditBookDialog", function () {
    var myBookcaseItemId = $(this).data('id');
    $(".modal #Id").val(myBookcaseItemId);
    $('#editBookDialog').modal('show');
});

我们假设有一个带有签名 ActionResult Edit(string id) 的方法将数据返回到放置模态框的 PartialView。

模态框已经嵌入所有超链接的页面中,默认情况下它是不可见的。

我只是不知道如何根据传递的 ID 用不同的数据填充它。

【问题讨论】:

    标签: jquery asp.net-mvc twitter-bootstrap modal-dialog


    【解决方案1】:

    您可以使用 AJAX 通过控制器操作从服务器加载新数据:

    $(function() {
        $(document).on('click', '.open-EditBookDialog', function () {
            var myBookcaseItemId = $(this).data('id');
            // send an AJAX request to fetch the data
            $.get(this.href, { id: myBookcaseItemId }, function(data) {
                $('#editBookDialog').html(data).modal('show');
            });
            return false;
        });
    });
    

    现在显然您应该修改应该打开对话框的锚点,使其 href 指向 Edit 控制器操作:

    @Html.ActionLink(
        "Some text", 
        "Edit", 
        null, 
        new {
            data_toggle = "modal",
            data_id = bookcaseItem.Id,
            title = "Edit this item",
            @class = "open-EditBookDialog"
        }
    )
    

    【讨论】:

    • 谢谢,几乎可以使用了。似乎代码将正确的数据传递给模态,我现在唯一遇到的问题是模态没有显示(背景变暗,但模态不可见)。我希望能解决这个问题(当它 100% 正常工作时,我会将其标记为答案)。
    • 是的,它正在工作。它不起作用的原因是上面的代码试图将模态插入模态( .html() 部分)。我将 html() 函数替换为 replaceWith() 函数,现在模态完全被新的模态替换了。
    • @crafter,你是对的。感谢您指出了这一点。我已经更新了答案。
    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    相关资源
    最近更新 更多