在我的ResetPassword
动作上,我试图清除回发的电子邮件和密码字段,例如发生错误时。我曾尝试使用ModelState.Clear()
,但问题是某些错误永远不会发布回动作
:
"密码长度至少为6个字符。"
"密码与确认密码不匹配;
我认为其原因是由于 @Scripts.Render("~/bundles/jqueryval")
和/或模型DataType
属性
ResetPassword视图如下:
@model TestGame.ViewModels.ResetPasswordViewModel
@{
ViewBag.Title = "Reset password";
}
<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("ResetPassword", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form", autocomplete="off" }))
{
@Html.AntiForgeryToken()
<h4>Reset your password</h4>
<hr />
@Html.ValidationSummary("", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Code)
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Email, new { @class = "form-control", @autofocus = "autofocus" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Reset" />
</div>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
和ResetPasswordViewModel如下所示:
public class ResetPasswordViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
public string Code { get; set; }
}
我不知道你为什么要清除字段。这样做会让用户感到厌烦,因为他们将被迫重新输入所有内容。但如果你还是想这么做,那就继续往下读。
您提到的不返回的错误是验证错误,这是在客户端处理的。因此,要清除本例中的字段,需要一些JavaScript代码。您需要执行以下操作之一:
-
编写自己的JavaScript客户端验证,并使用自定义验证将其附加到您的字段。
-
修改客户端验证的JavaScript。
-
通过添加将在验证后立即运行的额外JavaScript函数来破解客户端验证的JavaScript。在浏览器中运行您的页面,查看生成的源代码,然后在底部附近搜索JavaScript验证。