【问题标题】:set dynamic data annotation error message from controller in asp.net mvc在 asp.net mvc 中从控制器设置动态数据注释错误消息
【发布时间】:2019-05-14 08:08:38
【问题描述】:

我正在创建 asp.net mvc 应用程序,在其中我将错误消息存储在我的数据库中,现在我想在用户单击提交时使用必填字段注释而不是自定义 js 验证,我的模型如下所示,

[Required(ErrorMessage = "static error message")]
public string AttributeValue { get; set; }

我想添加动态错误消息而不是 ->(静态错误消息)

有没有办法从控制器添加动态错误消息。

【问题讨论】:

  • 为了获得最佳性能,不要在每次需要读取单个文本时都访问数据库。更好地为动态错误消息构建您自己的资源文件。
  • @MannanBahelim 字段名称可以由用户更改
  • 类似问答
  • 验证失败时可以添加 ModelState.AddModelError("AttributeValue", "error message");到控制器
  • @MannanBahelim 是的,我知道,但我想在 HTTPGet 期间添加错误消息而不是发布

标签: asp.net-mvc validation data-annotations


【解决方案1】:

我需要动态设置正则表达式,而不是像 @Golda 在 cmets 中建议的那样创建自己的验证器,我作弊并使用模型上的属性设置 data-val 错误,这是所有必需的属性在 TagHelper 的帮助下做任何事情。

像往常一样构建模型并添加一个额外的属性来保存错误消息

[Required(ErrorMessage = "static error message")] // Leave this here for server side
public string AttributeValue { get; set; }

public string AttributeValueRequiredErrorMessage { get; set; }

确保在控制器中设置此属性

 public async Task<IActionResult> SomeAction()
 {
      .... // other logic
      var  attributeValueRequiredErrorMessage  = callTheDb();

      var model = new Model()
      {
            AttributeValueRequiredErrorMessage = attributeValueRequiredErrorMessage
      }

      return View(model);  
 }

那么在你看来,只需这样做

<input asp-for="AttributeValue " data-val-required="@Model.AttributeValueRequiredErrorMessage " />

这将有助于快速取胜,但如果您在多个地方这样做,我可能会考虑另一种方法。

如果您不介意使用命中服务器端,如果您在 dotnet core 中,也可以实现 [Remote] 属性,请参阅文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.0#remote-attribute

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多