清除回发/错误上的字段-带有DataType属性验证的MVC



在我的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验证。

最新更新