我正在搞乱数据注释。当我点击链接转到某个页面时,会显示验证消息,但我希望验证消息不会显示,除非已发布数据。
查看:
@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.")
型号:
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }
控制器:
[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");
}
就像我说的,我的问题发生在AddUser视图的页面加载上。当我单击链接以查看AddUser页面时,验证消息在加载后显示,但此时没有数据已发布且模型为空。
答案 0 :(得分:22)
您可以在绑定用户后清除模型状态:
ModelState.Clear();
这是因为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");
}
答案 1 :(得分:12)
将验证样式设置为:
.validation-summary-valid { display:none; }
所以默认情况下它是隐藏的。错误将触发它显示。
答案 2 :(得分:1)
.field-validation-valid {
display: none;
}
每当验证在页面加载时触发时,此“.field-validation-valid”值将自动添加到触发的输入元素的class属性中。
通过添加CSS来显示none作为特定类的值,您将不再在初始页面加载时看到验证消息。
在触摸特定输入元素后,验证消息仍会正常显示。
答案 3 :(得分:0)
当我发生这种情况时,模型未传递给视图,并且同时使用了get和post。
我申请了@Renan Araujo的解决方案
答案 4 :(得分:-1)
$('.field-validation-error').html("");