如何在页面加载时使用数据注释在服务器端进行验证时隐藏警告框

How to hide alert box when validation is on server side with Data Annotation on page load

我在 mvc 上创建了一个简单的登录页面,当用户没有输入密码或用户名时必须通知用户,使用数据注释如下。

 [Required(ErrorMessage = "password needed")]
    public string password { get; set; }
    [Required(ErrorMessage = "user name needed")]
    public string username{ get; set; }

在控制器中,我正在使用如下硬编码值进行测试:

 public ActionResult Login2(Login login)
    {
        string username = login.username;    
        string password = login.password;
        if (ModelState.IsValid)
        {              
            if (username == "100000" && password == "password")
            {
                return RedirectToAction("Index", "Home");
            }               
           else{
           return View();
           }
        }
        return View();

在viwe中,我通过如下验证信息进行验证:

         <label class="form-label" for="contactPhone">
                          username
                        </label>
                        @Html.EditorFor(model => model.CVR, new { 
           htmlAttributes = new { @class = "form-input", PlaceHolder = 
               "username", maxlength = "10", Type="HtmlInputFile", 
                    id="username" , value=""} })
                        <br>
                        @Html.ValidationMessageFor(model => 
                  model.username, "", new { @class = "alert alert-error" })

                        <label class="form-label" for="contactPhone">
                            p<ssword
                        </label>
                        @Html.EditorFor(model => model.password, 
          "Password", new { htmlAttributes = new { @class = "form- 
           input", PlaceHolder = "password" } })
                        <br>
                        @Html.ValidationMessageFor(model => 
               model.password, "", new { @class = "alert alert-error" })
                    <button class="button button-primary button-active" 
                   id="danger" type="submit">Login</button>

问题是警告框显示在页面加载(空)上。 一旦提交按钮未填写字段,就会显示错误消息。我的问题如下: 1-加载登录页面时如何隐藏红色警告框? 2- 如何为验证用户名和密码添加更多限制。例如:

  1. 如何验证正确的密码?并在警告框中显示错误消息?
  2. 如何验证正确的用户名?并在警告框中显示错误?

在 MVC 中执行此操作的标准方法是将所有验证添加到模型中:

public class LoginViewModel
{
    [Required(ErrorMessage = "password needed")]
    public string Email { get; set; }

    [Required(ErrorMessage = "user name needed")]
    public string Password { get; set; }
}

然后在您的控制器中,您将检查模型是否有效:

public ActionResult Login2(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model); // <-- return invalid model to the same view (Login2) so  user can fix it        
    }

    // code for valid model...
}

并在视图中显示错误消息,如:

@using (Html.BeginForm("Login2", "Account", FormMethod.Post, new { role = "form" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form login-form">
        <div class="form-group">
            @Html.LabelFor(m => m.username, new { @class = "" })
            @Html.TextBoxFor(m => m.username, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.username, "", new { @class = "text-danger" })
        </div>

        <div class="form-group">
            @Html.LabelFor(m => m.password, new { @class = "" })
            Html.PasswordFor(m => m.password, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.password, "", new { @class = "text-danger" })
        </div>
    </div>
}

有关自定义密码验证规则的信息,请参阅