我可以在控制器 MVC 上获取与数据注释一起使用的自定义错误消息吗?

Can I get the custom error message used with data annotation on controller MVC?

给定一个简化的 class,如下所示:

public class Cliente
{
    [Display(Name = "Usuário")]
    [Required(ErrorMessage = "Informe um nome de usuário")]
    [EmailAddress(ErrorMessage = "Informe um e-mail válido")]
    [Remote("verificarUsernameCadastrado", "Validate", HttpMethod = "POST")]
    public String Username { get; set; }
}

我是 MVC 世界的新手,我在想.. 有没有办法在控制器中获取与数据注释一起使用的自定义错误消息?

例如,如果我在操作中访问 属性 Username,我想得到我为 EmailAddress 提供的错误消息(在这种情况下,"Informe um e-mail válido").

我可以很容易地在我想使用的地方复制这条消息,但我真的很想知道是否可以这样做。

提前致谢!

您可以使用反射来完成此操作,最好用作扩展方法:

public static T GetAttribute<T>(this object instance, string propertyName) where T : Attribute
{
    var attrType = typeof(T);
    var property = instance.GetType().GetProperty(propertyName);
    return (T)property .GetCustomAttributes(attrType, false).First();
}

用法:

var errorMessage = client.GetAttribute<EmailAddressAttribute>("Username").ErrorMessage;

当你 POST 到控制器方法时,你可以从 ModelState 得到这个:

public ActionResult MyMethod(model MyModel)
{
    if (ModelState.IsValid)
    {
         // normal processing
    }
    else
    {
        if (ModelState["Username"].Errors.Count > 0)
        {
            var msg = ModelState["Username"].Errors[0].ErrorMessage;
        }
    }
}