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

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)

所以默认情况下它是隐藏的.错误将触发它显示.

  • 为什么我们需要手动完成它.为什么它不是由框架本身处理的.: - | (3认同)