Asp.net mvc 当验证在服务器端且页面加载时带有数据批注时,如何隐藏警报框

Asp.net mvc 当验证在服务器端且页面加载时带有数据批注时,如何隐藏警报框,asp.net-mvc,alert,data-annotations,Asp.net Mvc,Alert,Data Annotations,我在mvc上创建了一个简单的登录页面,当用户没有输入密码或用户名时,必须通知用户,使用如下数据注释 [Required(ErrorMessage = "password needed")] public string password { get; set; } [Required(ErrorMessage = "user name needed")] public string username{ get; set; } 在控制器中,我使用硬编码值进行测试,如下所示

我在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>

用户名
@EditorFor(model=>model.CVR,新{
htmlAttributes=new{@class=“表单输入”,占位符=
“用户名”,maxlength=“10”,Type=“HtmlInputFile”,
id=“username”,value=”“})

@Html.ValidationMessageFor(模型=> model.username,“,新的{@class=“警报错误”}) p.model.password, “密码”,new{htmlAttributes=new{@class=“form- 输入“,占位符=“密码”})
@Html.ValidationMessageFor(模型=> model.password,“,新{@class=“alert error”}) 登录
问题在于页面加载时会显示警报框(空)。 单击“提交”按钮但不填写字段后,将显示错误消息。我的问题如下: 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...
    }
    
    public ActionResult Login2(LoginViewModel模型,字符串returnUrl)
    {
    如果(!ModelState.IsValid)
    {
    返回视图(模型);//m.username,新{@class=”“})
    @TextBoxFor(m=>m.username,新的{@class=“form control”})
    @Html.ValidationMessageFor(m=>m.username,“,new{@class=“text danger”})
    @LabelFor(m=>m.password,新的{@class=”“})
    Html.PasswordFor(m=>m.password,新的{@class=“form control”})
    @Html.ValidationMessageFor(m=>m.password,“,new{@class=“text danger”})
    }
    

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

    谢谢您的回答,我会接受它作为答案,但我不确定这一行:(Html.BeginForm(“Login2”,“Account”,FormMethod.Post,new{role=“form”})).我应该如何理解Account和FormMethod.Post在本文中的意思?是一个ASP.NET MVC帮助程序,您可以使用。此帮助程序将为您生成HTML标记…每个表单都有某些属性,如
    操作
    方法
    。在上面的示例中,我说该方法应该是Post(您不希望登录时使用GET方法),Login2和Account代表您的操作方法。因此,上面的表单将向
    /Account/Login2
    @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>
    }