【问题标题】:Error message for custom validation not showing asp.net core自定义验证的错误消息未显示 asp.net 核心
【发布时间】:2018-03-05 21:33:52
【问题描述】:

我的自定义验证正在工作,我已经测试过了,但没有显示错误消息。

我的注释:

    [Required(ErrorMessage = "O campo DATA DE NASCIMENTO é obrigatório")]
    [DataValida( ErrorMessage = "O campo DATA DE NASCIMENTO é inválido")]
    public DateTime DataNascimento { get; set; }

我的验证定义:

public class DataValida : ValidationAttribute
{        
 public override bool IsValid(object value)
 {

    DateTime dt;
    bool result = DateTime.TryParse(value.ToString(),out  dt);

    return result;
   }

}

我的看法:

 <div>
            <label for="tbNome">Data Nascimento:</label>
            <input id="tbDataNascimento" type="text" maxlength="10" placeholder="DD/MM/AAAA" asp-for="DataNascimento" class="form-control" />
            <span asp-validation-for="DataNascimento" class="text-danger"></span>
        </div>

所需的验证会显示消息,但我的自定义验证不会。

obs:我已禁用客户端验证。

【问题讨论】:

  • 它不会显示,因为您还没有为自定义属性实现客户端验证。 See
  • @CodingYoshi 我没有使用客户端验证。
  • 您的问题是什么?您希望消息显示还是不显示?
  • 有些东西我应该加进去的,一开始我考虑过但是没加进去,就是动作。我在不应该重定向的时候进行了重定向。

标签: c# asp.net-core-mvc


【解决方案1】:

发生错误时我正在重定向。

if(ModelState.IsValid)
{
}
else
{
    return RedirectToAction("action");  //this will cause error messages not to show

   return View(objectToPass); //This will work
}

【讨论】:

    【解决方案2】:

    如果您的要求只是确保最终用户输入了有效日期,只需使用 DataTypeAtribute 而不是重新发明轮子:

    [DataType(DataType.DateTime)]
    public DateTime DataNascimento { get; set; }
    

    【讨论】:

    • 我需要它是定制的。我正在验证出生日期,我将进一步扩展此功能。防止未成年人注册等。
    • @DiegoAlves 这似乎是一个业务需求,应该在您的业务模型中实现,而不是在视图模型属性中......
    • @oscar 业务需求可以在客户端和服务器中实现。如果您可以编写 js 或自定义属性来执行规则,为什么还要访问服务器。但是你永远不应该只在客户端编写它们;永远不要相信客户。
    • 在一个 asp.net mvc 应用程序中你能举一个真实的例子吗?我可以在其中进行验证。
    • 您可以提供最小和最大日期,html5 会处理它。但是,如果是其他规则,例如您只能输入字母a:您将编写一些javascript来确保这一点。但是在你的业务层的服务器端,你也会有这个规则,以防万一它在客户端被遗忘或 js 被禁用。
    猜你喜欢
    • 2016-07-23
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多