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没有任何错误。这就是为什么我想直接获得我给出的自定义错误消息。在任何情况下,我赞成你的答案,因为我认为它有用。这正是我想要的。这就是堆栈溢出如此巨大的原因。谢谢!