- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经断断续续地为此工作了几天,但无法完全按照我的预期工作。我看过很多例子,但我一定是误解了一些东西。
我拥有的是一个加载了部分 View 的 Bootstrap Modal。我想做的是验证(希望是客户端)任何错误都会在模态中的 @ValidationSummary 中显示。最大的问题我遇到的是,当出现错误时,它基本上不会在原始模式中显示,而是加载模式新页面中的部分 View 。验证摘要已正确填充,但没有任何样式加上它此时不在模式中。
*注意:我目前没有使用 AJAX 来加载模式。我最终会明白的,但我不太舒服尚未使用 AJAX,我想先让它工作,然后我可以回来并在 AJAX 中重构。
_Layout.cshtml - 我发现一个示例,说明我需要在加载 Modal 时加载 JS.unobtrusive。我假设我这样做是正确的,但我可能会遗漏一些东西。
<div id="modal-container" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
</div>
</div>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
<script type="text/javascript">
//**** Bootstrap Modal - used with Partial Views ***********************
$(function () {
// Initalize modal dialog
// attach modal-container bootstrap attributes to links with .modal-link class.
// when a link is clicked with these attributes, bootstrap will display the href content in a modal dialog.
$('body').on('click', '.modal-link', function (e) {
e.preventDefault();
$(this).attr('data-target', '#modal-container');
$(this).attr('data-toggle', 'modal');
//load the unobtrusive JS code
$jQval.unobtrusive.parse($modal-container);
var $form = $modal-container.find("form");
$.validator.unobtrusive.parse($form);
});
// Attach listener to .modal-close-btn's so that when the button is pressed the modal dialog disappears
$('body').on('click', '.modal-close-btn', function () {
$('#modal-container').modal('hide');
});
//clear modal cache, so that new content can be loaded
$('#modal-container').on('hidden.bs.modal', function () {
$(this).removeData('bs.modal');
});
$('#CancelModal').on('click', function () {
return false;
});
});
_PasswordReset.cshtml
div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4>Reset your Password</h4>
</div>
<div class="modal-body">
<div class="form-horizontal">
@using (Html.BeginForm("PasswordReset", "Member", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(false, "", new { @class = "alert alert-danger" })
<!-- BEGIN HIDDEN FIELDS AREA -->
@Html.HiddenFor(model => model.MemberId)
<!-- END HIDDEN FIELDS AREA -->
<div class="form-group">
<label class="control-label col-xs-3">Password</label>
<div class="col-md-9">
@Html.TextBoxFor(c => c.Password, new { Class = "form-control", placeholder = "New Password", autofocus = "" })
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3">Confirm</label>
<div class="col-md-9">
@Html.TextBoxFor(c => c.PasswordConfirm, new { Class = "form-control", placeholder = "Confirm Password" })
</div>
</div>
<div class="form-group">
<div class="col-xs-offset-3 col-xs-9">
<button type="submit" id="approve-btn" class="btn btn-primary">
Reset
</button>
<input type="button" class="btn btn-default" value="Cancel" data-dismiss="modal" />
</div>
</div>
}
</div>
</div>
Controller - 我假设如果模型无效,那么我应该传回 PartialView,因为这是我最初加载到 Modal 中的内容?
public ActionResult PasswordReset(MemberViewModel vm)
{
MemberPasswordReset model = new MemberPasswordReset();
model.MemberId = vm.MemberId;
return PartialView("_PasswordReset", model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async System.Threading.Tasks.Task<ActionResult> PasswordReset(MemberPasswordReset model)
{
if (!ModelState.IsValid)
{
return PartialView("_PasswordReset", model);
}
ApplicationDbContext context = new ApplicationDbContext();
UserStore<ApplicationUser> userStore = new UserStore<ApplicationUser>(context);
UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(userStore);
String userId = User.Identity.GetUserId();
String hashedNewPassword = UserManager.PasswordHasher.HashPassword(model.Password);
ApplicationUser currentUser = await userStore.FindByIdAsync(userId);
await userStore.SetPasswordHashAsync(currentUser, hashedNewPassword);
await userStore.UpdateAsync(currentUser);
return RedirectToAction("MyAccount");
}
View 模型
public class MemberPasswordReset
{
public string Password { get; set; }
[Compare("Password", ErrorMessage = "Confirm password doesn't match.")]
public string PasswordConfirm { get; set; }
public int MemberId { get; set; }
}
Bundle.config
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js",
"~/Scripts/jquery.validate.js",
"~/Scripts/jquery.validate.unobtrusive.js"));
最佳答案
您无法传回部分 View ,因为它仅返回部分 View - 而不是 View + 模式内加载的部分 View 。所以你目前所看到的是正确的。
您需要使用 AJAX 传回 JSON 响应,以便它在模式的部分 View 中进行验证。
如果模型状态无效,则返回模型状态的键值对。一个很好的起始示例如下:Example
将其发送回您的 View 后,您可以使用 jquery 将模型错误(如果有)附加到验证摘要区域。
编辑:
请求的示例 -
Controller
public class HomeController : BaseController
{
[HttpPost]
public ActionResult Edit(EditViewModel vm)
{
if(ModelState.IsValid)
{
//do stuff
return Json(new
{
status = "success"
//return values if needed
}
}
return Json(new
{
status = "failure",
formErrors = ModelState.Select(kvp => new { key = kvp.Key, errors = kvp.Value.Errors.Select(e => e.ErrorMessage)})});
}
}
}
查看
@using (Ajax.BeginForm("Edit", new AjaxOptions { OnSuccess = "onChangeSuccess"}))
{
//Modal header, body, footer
//Make sure your form fields actually contain their Razor validation fields
}
JQuery
function onChangeSuccess(data) {
if (data.status === "success") {
$("#modalcontent").modal('hide');
$("#message-area").html(data.view);
}
$.each(data.formErrors, function() {
$("[data-valmsg-for=" + this.key + "]").html(this.errors.join());
});
}
关于jquery - MVC 5 与来自部分 View 验证的 Bootstrap Modal 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533599/
我在使用 io-ts 时遇到一些问题。我发现它确实缺乏文档,我取得的大部分进展都是通过 GitHub issues 取得的。不,我不明白 HKT,所以没有帮助。 基本上,我在其他地方创建一个类型,ty
我必须创建一个正则表达式来搜索整个文件,以找到与 Java XML 解析器的第一部分(但不是第二部分)的匹配项。这将用于防止某些 XXE 攻击。不幸的是,它确实必须是单个正则表达式,并且它确实需要搜索
我有一些简单的 Shared/_Header.cshtml 文件中的内容。 My Shared/_Layout.cshtml 通过调用插入该代码 @Html.Partial("_Header") 目前
我有一个 if-else 语句,其中: 条件 1:ID 匹配并且自动填充某些字段。然后 if 语句只填充其余字段 条件 2:ID 不匹配,所有字段均为空白。 ELSE 语句将它们全部填充 当我使条件
我正在开发一个单页滚动网站。我正在尝试实现 ScrollMagic 并固定第一部分,以便网站的其余部分滚动到固定部分的顶部。我尝试创建一个 jsfiddle 来显示问题,但我似乎无法让 jsfiddl
这是我的情况: 我想使用 Google AdWords 的转换脚本,但出于某种原因,他们代码段的 javascript 部分在我的页面上添加了一些我似乎无法摆脱的不需要的空白。 所以我正在查看的选项纯
寻找一种优雅的方式在页面上添加一次脚本,就是这样。 我有一个需要 2 个 CSS 文件和 2 个 JS 文件的部分 View 。在大多数地方,只需要其中 1 个部分 View 。但在单个页面上,我需要
我想要一个网站,该网站始终具有相同的部分,具有相同的 id 以及我想要显示的所有内容。我对 javascript 不太了解,我想知道如何删除除特定部分之外的所有内容。 最好的方法是否是只执行一个循环来
SQL 语句教程 (11) Group By 我们现在回到函数上。记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name)
我试图理解部分并认为我已经明白了。基本上,这是一种将部分应用程序应用于二元运算符的方法。所以我了解所有(2*) , (+1)等例子就好了。 但是在 O'Reilly Real World Haskel
有没有办法禁止在部分中覆盖给定的关键字参数?假设我要创建函数 bar总是有 a设置为 1 .在以下代码中: from functools import partial def foo(a, b):
我有这个使用节的 OpenMP 代码 #pragma omp parallel sections num_threads(8) { printf_s("Allo fro
我正在尝试重新创建 Apple 制作的有缺陷的 CNContactPickerViewController,因此我有一个数据数组 [CNContact],我需要将其整齐地显示在 UITableView
我有一个相对布局,其中包含一些 float 在 GridView 上的 TextView 。当我在网格中选择一个项目时,布局向下移动到屏幕的尽头,只有大约 1/5 的部分是可见的。这是使用简单的翻译动
我想在我的 tableView 中有两个部分。我希望将项目添加到第 0 节,然后能够选择一行以将其从第 0 节移动到第 1 节。到目前为止,我已将这些项目添加到第 0 节,但是当它关闭时数据不会加
我正在以自由职业者的身份开发支付控制软件,但我有一些关于 mysql 的问题。 。我有一个用作日志的表,名为“Bitacora”。在表中,我有一个名为 idCliente 的列,它是自己表中一个人的
我有一个 PFQueryTableViewController,我想向 tableview 添加部分,我这样尝试: - (PFQuery *)queryForTable { PFQuery *qu
我正在尝试编写一个查询,将部分匹配项与存储的名称值进行匹配。 我的数据库如下所示 Blockquote FirstName | Middle Name | Surname --------------
我正在开发一个语音备忘录应用程序,并且正在将文件保存到表格 View 中。我希望默认文件名显示为“新文件 1”,如果使用“新文件 1”,则它会显示为“新文件 2”,依此类推。 我正在尝试使用 do-w
我有以下简单的 HTML 布局 .section1 { background: red; } .section2 { background: green; } .section3 { ba
我是一名优秀的程序员,十分优秀!