在 asp.net mvc 中设置来自控制器的动态数据注释错误消息

Ibr*_*ikh 6 validation asp.net-mvc data-annotations

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

[Required(ErrorMessage = "static error message")]
public string AttributeValue { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

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

Phi*_*hil 5

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

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

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

public string AttributeValueRequiredErrorMessage { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

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

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

      return View(model);  
 }
Run Code Online (Sandbox Code Playgroud)

然后在你看来只需这样做

<input asp-for="AttributeValue " data-val-required="@Model.AttributeValueRequiredErrorMessage " />
Run Code Online (Sandbox Code Playgroud)

这将有助于快速获胜,但如果您在多个地方这样做,我可能会考虑替代方案。

如果您不介意点击服务器端,如果您在 dotnet core 中,您也可以实现 [Remote] 属性,请参阅文档:https: //learn.microsoft.com/en-us/aspnet/core/mvc/模型/验证?视图=aspnetcore-3.0#remote-attribute