给出一个简化的类,如下所示:
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 “)。
我可以轻松地将此消息复制到我想要使用的位置,但我真的想知道是否可以这样做。
提前致谢!
答案 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;
}
}
}