Using Bootstrap Modal window as PartialView

后端 未结 5 914
南方客
南方客 2020-11-27 10:05

I was looking to using the Twitter Bootstrap Modal windows as a partial view. However, I do not really think that it was designed to be used in this fashion; it seems like

相关标签:
5条回答
  • 2020-11-27 10:46

    Complete and clear example project http://www.codeproject.com/Articles/786085/ASP-NET-MVC-List-Editor-with-Bootstrap-Modals It displays create, edit and delete entity operation modals with bootstrap and also includes code to handle result returned from those entity operations (c#, JSON, javascript)

    0 讨论(0)
  • 2020-11-27 10:47

    Yes we have done this.

    In your Index.cshtml you'll have something like..

    <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>
    

    Then in JS for the same page (inlined or in a separate file you'll have something like this..

    $(document).ready(function() {
       $('#showGame').click(function() {
            var url = $('#gameModal').data('url');
    
            $.get(url, function(data) {
                $('#gameContainer').html(data);
    
                $('#gameModal').modal('show');
            });
       });
    });
    

    With a method on your controller that looks like this..

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

    You will of course need a view called GetGameListing.cshtml inside of your Views folder..

    0 讨论(0)
  • 2020-11-27 10:49

    I have achieved this by using one nice example i have found here. I have replaced the jquery dialog used in that example with the Twitter Bootstrap Modal windows.

    0 讨论(0)
  • 2020-11-27 11:03

    I do this with mustache.js and templates (you could use any JavaScript templating library).

    In my view, I have something like this:

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

    ...which lets me keep my templates in a partial view called 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>
    

    I create placeholders for each modal in my view:

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

    ...and make ajax calls with jQuery:

    <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>
    

    Then, you just need a trigger somewhere:

    <%foreach (var item in Model) {%>
        <a data-toggle="modal" href="#modelModal<%=Html.Encode(item.Id)%>">
            <%=Html.Encode(item.DutModel.Name)%>
        </a>
    <%}%>
    
    0 讨论(0)
  • 2020-11-27 11:03

    I use AJAX to do this. You have your partial with your typical twitter modal template html:

    <div class="container">
      <!-- Modal -->
      <div class="modal fade" id="LocationNumberModal" role="dialog">
        <div class="modal-dialog">
          <!-- Modal content-->
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">
                &times;
              </button>
              <h4 class="modal-title">
                Serial Numbers
              </h4>
            </div>
            <div class="modal-body">
              <span id="test"></span>
              <p>Some text in the modal.</p>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">
                Close
              </button>
            </div>
          </div>
        </div>
      </div>
    </div>
    

    Then you have your controller method, I use JSON and have a custom class that rendors the view to a string. I do this so I can perform multiple ajax updates on the screen with one ajax call. Reference here: Example but you can use an PartialViewResult/ActionResult on return if you are just doing the one call. I will show it using JSON..

    And the JSON Method in Controller:

    public JsonResult LocationNumberModal(string partNumber = "")
    {
      //Business Layer/DAL to get information
      return Json(new {
          LocationModal = ViewUtility.RenderRazorViewToString(this.ControllerContext, "LocationNumberModal.cshtml", new SomeModelObject())
        },
        JsonRequestBehavior.AllowGet
      );
    }
    

    And then, in the view using your modal: You can package the AJAX in your partial and call @{Html.RenderPartial... Or you can have a placeholder with a div:

    <div id="LocationNumberModalContainer"></div>
    

    then your ajax:

    function LocationNumberModal() {
      var partNumber = "1234";
    
      var src = '@Url.Action("LocationNumberModal", "Home", new { area = "Part" })'
        + '?partNumber='' + partNumber; 
    
      $.ajax({
        type: "GET",
        url: src,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
          $("#LocationNumberModalContainer").html(data.LocationModal);
          $('#LocationNumberModal').modal('show');
        }
      });
    };
    

    Then the button to your modal:

    <button type="button" id="GetLocBtn" class="btn btn-default" onclick="LocationNumberModal()">Get</button>
    
    | |
    0 讨论(0)
提交回复
热议问题