all*_*ded 18 c# asp.net-mvc asp.net-mvc-validation data-annotations razor
我正在搞乱数据注释.当我点击链接转到某个页面时,会显示验证消息,但我希望验证消息不显示,除非已发布数据.
视图:
@Html.TextBoxFor(m => m.EmailAddress, new { @placeholder = "Enter Email", @class = "form-control" })
@Html.ValidationSummary(true, "Registration Failed. Check your credentials")
@Html.ValidationMessageFor(m => m.EmailAddress, "You must enter a valid Email Address.")
Run Code Online (Sandbox Code Playgroud)
模型:
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }
Run Code Online (Sandbox Code Playgroud)
控制器:
[HttpGet]
public ActionResult AddUser()
{
return View();
}
[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
if (ModelState.IsValid)
{
var success = UserRepository.AddUser(user);
if (success)
{
return View("Success");
}
}
return View("AddUser");
}
Run Code Online (Sandbox Code Playgroud)
就像我说的,我的问题出现在AddUser视图的页面加载上.当我单击链接以查看AddUser页面时,验证消息在加载后显示,但此时没有数据已发布且模型为空.
Ren*_*újo 28
绑定用户后可以清除模型状态:
ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)
这是因为ModelBinder将设置ModelState绑定.在绑定模型并返回具有相同模型的视图的每个操作中,您都会遇到此问题.
[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
if (ModelState.IsValid)
{
var success = UserRepository.AddUser(user);
if (success)
{
return View("Success");
}
}
ModelState.Clear(); // <-------
return View("AddUser");
}
Run Code Online (Sandbox Code Playgroud)
jzm*_*jzm 13
将验证样式设置为:
.validation-summary-valid { display:none; }
Run Code Online (Sandbox Code Playgroud)
所以默认情况下它是隐藏的.错误将触发它显示.
| 归档时间: |
|
| 查看次数: |
16739 次 |
| 最近记录: |