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

时间:2015-02-09 13:04:10

标签: c# asp.net-mvc data-annotations

给出一个简化的类,如下所示:

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-mailválido “)。

我可以轻松地将此消息复制到我想要使用的位置,但我真的想知道是否可以这样做。

提前致谢!

2 个答案:

答案 0 :(得分:4)

您可以使用反射执行此操作,更好地用作扩展方法:

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;

答案 1 :(得分:2)

当您向控制器方法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;
        }
    }
}