На самом деле это не сообщение, полученное в результате проверки модели. Сообщение добавляется в состояние модели, когда средство связывания модели не может преобразовать входное значение в тип значения связанного свойства. Это может произойти, например, когда свойство bound является целым числом, и пользователь ввел нецифровый символ в поле ввода этого свойства.
Чтобы переопределить сообщение, вам, к сожалению, придется сделать это «сложным» способом, то есть расширить класс DefaultModelBinder и переопределить метод SetProperty. Вот пример:
public class MyModelBinder: DefaultModelBinder
{
public MyModelBinder()
{
}
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
string key = bindingContext.ModelName + "." + propertyDescriptor.Name;
if (bindingContext.ModelState[key] != null)
{
foreach (ModelError error in bindingContext.ModelState[key].Errors)
{
if (IsFormatException(error.Exception))
{
bindingContext.ModelState[key].Errors.Remove(error);
bindingContext.ModelState[key].Errors.Add(string.Format("My message for {0}.", propertyDescriptor.DisplayName));
break;
}
}
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
private bool IsFormatException(Exception e)
{
while (e != null)
{
if (e is FormatException)
{
return true;
}
e = e.InnerException;
}
return false;
}
}