问题描述
我创建了一个页面,当单击链接/按钮时,该页面将部分视图加载到引导模式(使用 jquery)中。但是,这样做会导致一些我需要修复的不良行为。
页面是这样写的:
<div class="modal animate__animated animate__fadeIn" id="editmodal">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="editmodaltitle">Modal title</h5>
<button type="button" class="btn-close" onclick="ToggleModal('editmodal');" aria-label="Close"></button>
</div>
<div class="modal-body" id="editmodalbody">
...
</div>
</div>
</div>
</div>
部分视图是:
@model Data_Loggers.Areas.Admin.viewmodels.UserDetailsviewmodel
@{
Layout = null;
}
<div class="col-auto form-group rounded-3 p-3">
<form asp-controller="User" asp-action="Update" id="detailsform" method="post">
@Html.AntiForgeryToken()
<label asp-for="Username"></label>
<input asp-for="Username" class="form-control" />
<label asp-for="@Model.displayName"></label>
<input asp-for="@Model.displayName" class="form-control" />
<label asp-for="PhoneNumber"></label>
<input asp-for="PhoneNumber" class="form-control" />
<label asp-for="ExpirationDate"></label>
<input asp-for="ExpirationDate" class="form-control" />
<label asp-for="LockoutEnabled">محدودیت زمانی</label>
<input asp-for="LockoutEnabled" type="checkBox" checked="@Model.LockoutEnabled" class="form-check-input" />
<hr>
<button type="submit" class="btn btn-primary" onclick="EditUser();">تایید</button>
<div class="btn btn-danger">انصراف</div>
</form>
</div>
这里是将 html 加载到模态中的 javascript:
function ReplaceContent(modalcontent) {
let title = 'جزئیات کاربر ';
$('#editmodalbody').html(modalcontent);
SetModalTitle(title + $('#Username').val());
$('#editmodal').toggle();
$('#detailsform').validate();
}
局部视图的模型是:
public class UserDetailsviewmodel
{
public string Id{ get; set; }
[display(Name = "نام کاربری")]
[MinLength(3)]
[required]
public string Username{ get; set; }
public string Password{ get; set; }
[display(Name = "نام مستعار")]
[MinLength(3)]
[required]
public string displayName{ get; set; }
[display(Name = "تاریخ انقضا")]
public string ExpirationDate{ get; set; }
[display(Name = "دارای محدودیت زمانی")]
public bool LockoutEnabled{ get; set; }
[display(Name = "شماره تلفن")]
public string PhoneNumber { get; set; }
}
加载页面并打开模态时,局部视图加载正常,数据传递给视图没有任何问题(并且验证数据属性生成正确)。但是,当提交带有一些无效数据的表单时,jquery 验证不起作用并且表单提交。调用 $('#detailsform').valid()
始终会产生 true
值。
解决方法
找到了。
我必须在将 html 加载到页面后加载验证脚本。否则他们将无法工作。我用过
$.getScript('path/to/script.js');
所以正确的顺序是这样的:
- 将 HTML 加载到元素中。
- 使用
$.getScript('path/to/script.js');
包含验证脚本 - 显示模态