skip to Main Content

I can’t make the Modal work in the remote mode with the new Twitter Bootstrap release : Bootstrap 4 alpha. It works perfectly fine with Bootstrap 3. With bootstrap 4 I am getting the popup window, but the model body is not getting loaded. There is no remote call being made to myRemoteURL.do to load the model body.

Code:

<button type="button" data-toggle="modal" data-remote="myRemoteURL.do" data-target="#myModel">Open Model</button>

<!-- Model -->
<div class="modal fade" id="myModel" tabindex="-1"
    role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <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>
                <h3 class="modal-title" id="myModalLabel">Model Title</h3>
            </div>
            <div class="modal-body">
                <p>
                    <img alt="loading" src="resources/img/ajax-loader.gif">
                </p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Submit</button>
            </div>
        </div>
    </div>
</div>

6

Answers


  1. Chosen as BEST ANSWER

    Found the problem: They have removed the remote option in bootstrap 4

    remote : This option is deprecated since v3.3.0 and will be removed in v4. We recommend instead using client-side templating or a data binding framework, or calling jQuery.load yourself.

    I used JQuery to implement this removed feature.

    $('body').on('click', '[data-toggle="modal"]', function(){
            $($(this).data("target")+' .modal-body').load($(this).data("remote"));
        });  
    

  2. According to official documentation, we can do the follow(https://getbootstrap.com/docs/4.1/components/modal):

    $('#exampleModal').on('show.bs.modal', function (event) {
        var button = $(event.relatedTarget) // Button that triggered the modal
        var recipient = button.data('whatever') // Extract info from data-* attributes
        // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
        // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
        var modal = $(this)
        modal.find('.modal-title').text('New message to ' + recipient)
        modal.find('.modal-body input').val(recipient)
    })
    

    So, I believe this is the best approach (works for BS 5 too):

    <!-- Button trigger modal -->
    <a data-bs-toggle="modal" data-bs-target="#modal_frame" href="/otherpage/goes-here">link</a>
    
    <!-- Modal -->
    <div class="modal fade" id="modal_frame" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
      <!-- Completes the modal component here -->
    </div>
    
    <script>
      $('#modal_frame').on('show.bs.modal', function (e) {
        $(this).find('.modal-body').load(e.relatedTarget.href);
      });
    </script>
    

    e.relatedTarget is the anchor() that triggers the modal.

    Adapt to your needs

    Login or Signup to reply.
  3. As some of the other answers and Bootstrap docs indicate, Bootstrap 4 requires handling the show.bs.modal event to load content into the modal. This can be used to either load content from an HTML string, or from a remote url. Here’s a working example

    $('#theModal').on('show.bs.modal', function (e) {
    
        var button = $(e.relatedTarget);
        var modal = $(this);
    
        // load content from HTML string
        //modal.find('.modal-body').html("Nice modal body baby...");
    
        // or, load content from value of data-remote url
        modal.find('.modal-body').load(button.data("remote"));
    
    });
    

    Bootstrap 4 Remote URL Demo


    Another option is to open the modal once data is returned from an Ajax call…

      $.ajax({
           url: "http://someapiurl",
           dataType: 'json',
           success: function(res) {
    
               // get the ajax response data
               var data = res.body;
               // update modal content
               $('.modal-body').text(data.someval);
               // show modal
               $('#myModal').modal('show');
    
           },
           error:function(request, status, error) {
               console.log("ajax call went wrong:" + request.responseText);
           }
      });
    

    Bootstrap 4 Load Modal from Ajax Demo

    Login or Signup to reply.
  4. If you use the Jquery slim version (as in all the Bootstrap 4 docs and examples) the load function will fail

    You need to use the full version of Jquery

    Login or Signup to reply.
  5. In Asp.NET MVC, this works for me

    html

    <a href="#" onclick="Edit(1)">Edit item</a>
    <div class="modal" id="modalPartialView" />
    

    jquery

    <script type="text/javascript">
            function Edit(id)
            {
                $.ajax({
                    url: "@Url.Action("ActionName","ControllerName")",
                    type: 'GET',
                    cache: false,
                    data: {id: id},
                }).done(function(result){
                    $('#modalPartialView').html(result)
                    $('#modalPartialView').modal('show') //part of bootstrap.min.js
                });
            }
    <script>
    

    Action

    public PartialViewResult ActionName(int id)
    {
       // var model = ...
       return PartialView("_Modal", model);
    }
    
    Login or Signup to reply.
  6. This process is loading the current dynamic. data remote = “remoteContent.html”

    <!-- Link trigger modal -->
    <a href="javascript:void(0);" data-remote="remoteContent.html" data-toggle="modal" data-target="#myModal" data-remote="true" class="btn btn-default">
        Launch Modal
    </a>
    This trick :  data-remote="remoteContent.html"
    <!-- Default bootstrap modal example -->
    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <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" id="myModalLabel">Modal title</h4>
          </div>
          <div class="modal-body">
            ...
          </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>
    </div>
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search