Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在控制器MVC上获取与数据注释一起使用的自定义错误消息吗?_C#_Asp.net Mvc_Data Annotations - Fatal编程技术网

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

C# 我可以在控制器MVC上获取与数据注释一起使用的自定义错误消息吗?,c#,asp.net-mvc,data-annotations,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", Http

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

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();
}
publicstatict GetAttribute(此对象实例,stringpropertyname),其中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;
var errorMessage=client.GetAttribute(“用户名”).errorMessage;

当您发布到控制器方法时,可以从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;
        }
    }
}

是的,我已经用过了。但在当前情况下,我的模型为null,因此ModelState没有任何错误。这就是为什么我想直接获得我给出的自定义错误消息。在任何情况下,我赞成你的答案,因为我认为它有用。这正是我想要的。这就是堆栈溢出如此巨大的原因。谢谢!