如何将部分视图加载到 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 响应)
让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)