使用Bootstrap Modal窗口作为PartialView

KWo*_*dra 63 javascript asp.net-mvc modal-dialog twitter-bootstrap

我当时希望使用Twitter Bootstrap Modal窗口作为局部视图.但是,我并不认为它的设计是以这种方式使用的; 它似乎意味着以相当静态的方式使用.尽管如此,我认为能够将其用作局部视图会很酷.

例如,假设我有一个游戏列表.点击给定游戏的链接后,我想从服务器请求数据,然后在"当前页面顶部"的模态窗口中显示有关该游戏的信息.

我做了一些研究,发现这个帖子类似但不完全一样.

有没有人尝试过成功或失败?任何人都有jsFiddle或他们愿意分享的某些来源?

谢谢你的帮助.

Sha*_*lle 123

是的,我们已经这样做了.

在你的Index.cshtml中你会有类似的东西..

<div id='gameModal' class='modal hide fade in' data-url='@Url.Action("GetGameListing")'>
   <div id='gameContainer'>
   </div>
</div>

<button id='showGame'>Show Game Listing</button>
Run Code Online (Sandbox Code Playgroud)

然后在JS中为同一页面(内联或单独的文件中,你会有这样的东西..

$(document).ready(function() {
   $('#showGame').click(function() {
        var url = $('#gameModal').data('url');

        $.get(url, function(data) {
            $('#gameContainer').html(data);

            $('#gameModal').modal('show');
        });
   });
});
Run Code Online (Sandbox Code Playgroud)

使用控制器上的方法看起来像这样..

[HttpGet]
public ActionResult GetGameListing()
{
   var model = // do whatever you need to get your model
   return PartialView(model);
}
Run Code Online (Sandbox Code Playgroud)

您当然需要在Views文件夹中使用名为GetGameListing.cshtml的视图.

  • 在我从gameModal div类中删除"hide"之前,这对我不起作用. (3认同)
  • 如果你想从模态提交表单,它会变得更复杂. (2认同)
  • 最重要的是你需要处理服务器端错误.我们通过让服务器在需要显示错误时将带有结果代码的json对象和部分视图(填充模型错误)作为字符串返回来完成此操作. (2认同)

ken*_*ken 7

我使用mustache.js和templates(你可以使用任何JavaScript模板库).

在我看来,我有这样的事情:

<script type="text/x-mustache-template" id="modalTemplate">
    <%Html.RenderPartial("Modal");%>
</script>
Run Code Online (Sandbox Code Playgroud)

...这让我将模板保存在一个名为的部分视图中Modal.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <div>
        <div class="modal-header">
            <a class="close" data-dismiss="modal">&times;</a>
            <h3>{{Name}}</h3>
        </div>
        <div class="modal-body">
            <table class="table table-striped table-condensed">
                <tbody>
                    <tr><td>ID</td><td>{{Id}}</td></tr>
                    <tr><td>Name</td><td>{{Name}}</td></tr>
                </tbody>
            </table>
        </div>
        <div class="modal-footer">
            <a class="btn" data-dismiss="modal">Close</a>
        </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

我在视图中为每个模态创建占位符:

<%foreach (var item in Model) {%>
    <div data-id="<%=Html.Encode(item.Id)%>"
         id="modelModal<%=Html.Encode(item.Id)%>" 
         class="modal hide fade">
    </div>
<%}%>
Run Code Online (Sandbox Code Playgroud)

...并使用jQuery进行ajax调用:

<script type="text/javascript">
    var modalTemplate = $("#modalTemplate").html()
    $(".modal[data-id]").each(function() {
        var $this = $(this)
        var id = $this.attr("data-id")
        $this.on("show", function() {
            if ($this.html()) return
            $.ajax({
                type: "POST",
                url: "<%=Url.Action("SomeAction")%>",
                data: { id: id },
                success: function(data) {
                    $this.append(Mustache.to_html(modalTemplate, data))
                }
            })
        })
    })
</script>
Run Code Online (Sandbox Code Playgroud)

然后,你只需要一个触发器:

<%foreach (var item in Model) {%>
    <a data-toggle="modal" href="#modelModal<%=Html.Encode(item.Id)%>">
        <%=Html.Encode(item.DutModel.Name)%>
    </a>
<%}%>
Run Code Online (Sandbox Code Playgroud)