【问题标题】:Validation errors not disappearing after correction更正后验证错误不会消失
【发布时间】:2014-10-31 06:55:14
【问题描述】:

我的 MVC 模型是这样的 2 个必填字段和 2 个可选的必填字段 [如果 HasOptional 属性为 true ,则只有最后 2 个字段是必填的]

[Required(ErrorMessage="Required...")]
public string Title { get; set; }
[Required(ErrorMessage="Required...")]
public string Publisher { get; set; }

public bool HasOptional{get;set;}

public string OptTitle { get; set; }
public string OptPublisher { get; set; }

所以在控制器 POST 操作中我所做的是

if(model.HasOptional)
{
    if (string.IsNullOrEmpty(Convert.ToString(model.OptTitle)))
    {
      ModelState.AddModelError.Add("OptTitle","required....");
    }
    if (string.IsNullOrEmpty(Convert.ToString(model.OptPublisher)))
    {
      ModelState.AddModelError.Add("OptPublisher","required....");
    }
}

如果该属性为空,我会在没有任何问题的情况下查看验证消息。但我的问题是 如果我在视图中填充 OptTitle/OptPublisher 并更改文本框的焦点,我仍然可以在屏幕上看到验证消息。 填写信息后有什么方法可以让验证消失[比如前两个属性 Title 和 Publisher 的默认行为]

【问题讨论】:

  • 您只是在创建服务器端错误。为了进行客户端错误验证(以便它们消失),您需要创建 jquery.validate 和 jquery.validate.unobtrusive 可以使用的客户端规则。我建议您查看 foolproof's [RequiredIf] 属性,该属性将同时处理服务器端和客户端验证
  • RequiredIf 只能用于 bool 属性对吗?在我的实际情况中,我必须使用 Enumerator 属性 [可能需要 3 个可能的值]。有问题我只是为了简单起见将它用作 bool
  • Foolproof 有许多您可以查看的验证属性。在您的情况下(如果HasOptional=true,我假设您希望OptTitleOptPublisher 是必需的),将RequiredIf("HasOptional", ErrorMessaage=....)] 添加到OptTitleOptPublisher 将起作用
  • 我怎样才能将RequiredIf设置为特定值。如果HasOptional是“abc”,那么我需要将OptPublisher设置为Required
  • 但是属性HasOptional 是一个布尔值,所以我不确定我是否理解。但是您可以使用其他类似RequiredIfRegExMatch 的方法(我认为是[RequiredIfRegExMatch("HasOptional", "abc", Error...)]。当然,您可以随时实现自己的。

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


【解决方案1】:

添加客户端验证并手动编写或使用 jQuery 非侵入式验证,这将由您的数据注释属性引导。

如果您采用不显眼的方法,请确保您已包含脚本(MVC 随附)并在 Web 配置中启用。

相关教程位于: http://www.codeproject.com/Articles/577937/A-Beginners-Tutorial-on-Validating-Model-Data-and

【讨论】:

  • OP 已经在使用不显眼的验证,从粗体文本中可以清楚地看出
  • 我正在使用不显眼,但重点是我从 Controller 为几个属性添加 ModelError [仅需要有条件的],所以问题是这两个条件项也达到相同的效果
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 2018-07-06
  • 2018-02-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多