如何将部分视图加载到 Bootstrap 4 模式中

Posted

技术标签:

【中文标题】如何将部分视图加载到 Bootstrap 4 模式中【英文标题】:How to load Partial View into Bootstrap 4 modal 【发布时间】:2019-11-16 16:18:56 【问题描述】:

我曾经使用另一个名为 jquery modal 的 jquery 库。但是我决定切换回使用引导模式。

我不确定如何通过带有引导模式的 url 打开模式。这就是我过去使用 jquery modal 的方式:

@html.ActionLink("Add", "RoleDetails", @ViewContext.RouteData.Values["controller"].ToString(), new  Id = "", ApplicationId = Model.Id , new  @class = "btn btn-primary", @rel = "modal:open" )

这是我的控制器:

public ActionResult RoleDetails(string Id, string ApplicationId)

    ApplicationRoleDetailsViewModel role = new ApplicationRoleDetailsViewModel();
    if (Id == null)
    
        role = new ApplicationRoleDetailsViewModel
        
            ApplicationId = null,
            Id = Id,
            RoleName = null
        ;
    
    else
    
        var result = rolesData.Get(Id);
        role = new ApplicationRoleDetailsViewModel
        
            ApplicationId = result.ApplicationId,
            Id = Id,
            RoleName = result.Name
        ;
    
    return View("~/Areas/Applications/Views/Applications/Modals/RoleDetails.cshtml", role);

这是视图:

@model APPDATA.Data.ViewModels.ApplicationRoleDetailsViewModel
<script>
    $(document).ready(function () 

    );
    $(document).on("submit","#modal",function (e) 
        e.preventDefault();
        var form_data = $(this).serialize();
        $.ajax(
            url: "@Url.Action("SaveRole", @ViewContext.RouteData.Values["controller"].ToString())",
            method: "POST",
            data: form_data,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            success: function (result) 
                if (result.success) 
                    $(document).off("submit");
                    $(document).off("submit", "#save");
                    $('#modal').off('#save');
                    $.modal.close();
                    return;
                
                $.each(result.errors, function (index, item) 
                    // Get message placeholder
                    var element = $('[data-valmsg-for="' + item.propertyName + '"]');
                    element.empty();
                    // Update message
                    element.append($('<span></span>').text(item.errorMessage));
                    // Update class names
                    element.removeClass('field-validation-valid').addClass('field-validation-error');
                    $('#' + item.propertyName).removeClass('valid').addClass('input-validation-error');
                );
            
        );
        return false;
    );
</script>
<div class="col-sm-12">
    @if (Model.Id == null)
    
        <h2>Add Role</h2>
    
    else
    
        <h2>Edit Role</h2>
    
    <hr />
</div>
@using (Html.BeginForm(null, null, FormMethod.Post, new  id = "modal" ))

    @Html.AntiForgeryToken()
    <div class="col-sm-12">
        <div class="row">
            <div class="col-sm-12">
                <div class="form-group">
                    @Html.HiddenFor(m => m.Id)
                    @Html.HiddenFor(m => m.ApplicationId)
                    @Html.LabelFor(m => m.RoleName)
                    @Html.TextBoxFor(m => m.RoleName, new  @class = "form-control col-sm-12" )
                    @Html.ValidationMessageFor(m => m.RoleName)
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-12">
                <div class="form-group">
                    <div class="clearfix">
                        <div class="pull-right">
                            <input type="submit" id="save" value="Save" class="btn btn-primary" />
                            <a href="#" id="close" class="btn btn-outline-secondary" rel="modal:close">Cancel</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

如何将我的视图变成这样的模式?

<div class="modal" id="modal">
    <div class="modal-dialog">
        <div class="modal-content" id="modal-content">

        </div>
    </div>
</div>

【问题讨论】:

【参考方案1】:

如果您想将“RoleDetails.cshtml”加载到模态内容中,请使用 ajax 调用而不是 ActionLink。

不传递视图,而是从控制器返回部分视图。

所以 insde ajax 调用您将获得整个视图作为您可以附加到模型内容中的数据。

当您点击链接时,执行 ajax 调用并在获得成功响应后打开模型如下。

<a href="#" id='btnAdd'>Add</a>

<script>

$('#btnAdd').on('click',function()

$.ajax(
  url : '@Url.action("action","controller")',
  data : data,
  success : function(data)
    $('#model-content').html(data);
    $.modal.open();

);

);
</script>

【讨论】:

以上是关于如何将部分视图加载到 Bootstrap 4 模式中的主要内容,如果未能解决你的问题,请参考以下文章

将视图渲染到 ExpressJS 中的变量中(用于 AJAX 响应)

有没有办法在使用bootstrap模式时记录页面视图

让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)

有没有办法在 bootstrap-datetimepicker 中禁用月份/视图模式按钮?

将 JSON 数据加载到 Bootstrap 模式中

将信息动态加载到 Twitter Bootstrap 模式