我可以在控制器 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;
}
}
}
给定一个简化的 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;
}
}
}