第一次 MVC 不显示验证摘要消息
Don't Show Validation Summary Message First Time MVC
我正在使用 MVC 身份登录和必填字段的 MVC 验证,我不想第一次显示错误消息。它应该仅在用户单击提交按钮时显示。但是由于页面每次都将 post 发送到 ActionResult,所以它也向我展示了验证。
在页面加载时第一次不显示消息的方法是什么。
我用这段代码清除消息,但每次都清除
public ActionResult Login(LoginModel model)
{
if (!ModelState.IsValid)
{
return View("Login");
}
foreach (var key in ModelState.Keys)
{
ModelState[key].Errors.Clear();
}
}
//Model
public class LoginModel
{
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
}
//HTML
@using (Html.BeginForm())
{
@Html.ValidationSummary("")
@Html.TextBoxFor(model => model.Email, new { maxlength = "45", placeholder = "User Email" })
@Html.PasswordFor(model => model.Password, new { maxlength = "45", placeholder = "User Password" })
<button type="submit" class="LoginBtn" id="loginButton"></button>
}
您需要从 GET 方法中删除 LoginModel model
参数。发生的事情是 DefaultModelBinder
会在调用该方法后立即初始化 LoginModel
的新实例。因为您没有为 LoginModel
的属性提供任何值,它们是 null
,因此验证错误被添加到 ModelState
,然后显示在视图中。相反,您的方法需要
public ActionResult Login()
{
LoginModel model = new LoginModel(); // initialize the model here
return View(model);
}
我正在使用 MVC 身份登录和必填字段的 MVC 验证,我不想第一次显示错误消息。它应该仅在用户单击提交按钮时显示。但是由于页面每次都将 post 发送到 ActionResult,所以它也向我展示了验证。 在页面加载时第一次不显示消息的方法是什么。 我用这段代码清除消息,但每次都清除
public ActionResult Login(LoginModel model)
{
if (!ModelState.IsValid)
{
return View("Login");
}
foreach (var key in ModelState.Keys)
{
ModelState[key].Errors.Clear();
}
}
//Model
public class LoginModel
{
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
}
//HTML
@using (Html.BeginForm())
{
@Html.ValidationSummary("")
@Html.TextBoxFor(model => model.Email, new { maxlength = "45", placeholder = "User Email" })
@Html.PasswordFor(model => model.Password, new { maxlength = "45", placeholder = "User Password" })
<button type="submit" class="LoginBtn" id="loginButton"></button>
}
您需要从 GET 方法中删除 LoginModel model
参数。发生的事情是 DefaultModelBinder
会在调用该方法后立即初始化 LoginModel
的新实例。因为您没有为 LoginModel
的属性提供任何值,它们是 null
,因此验证错误被添加到 ModelState
,然后显示在视图中。相反,您的方法需要
public ActionResult Login()
{
LoginModel model = new LoginModel(); // initialize the model here
return View(model);
}