当没有数据发布时,在页面加载时显示MVC Razor验证错误

时间:2014-01-22 23:27:27

标签: c# asp.net-mvc razor data-annotations asp.net-mvc-validation

我正在搞乱数据注释。当我点击链接转到某个页面时,会显示验证消息,但我希望验证消息不会显示,除非已发布数据。

查看:

@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页面时,验证消息在加载后显示,但此时没有数据已发布且模型为空。

5 个答案:

答案 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("");