Ce n'est en fait pas un message qui dérive de la validation du modèle. Le message est ajouté à l'état du modèle lorsque le classeur du modèle est incapable de convertir une valeur d'entrée en le type de valeur de la propriété liée. Cela peut se produire par exemple lorsque la propriété liée est un nombre entier et que l'utilisateur a entré un caractère non numérique dans le champ de saisie de cette propriété. Pour surcharger le message, vous devrez malheureusement le faire de manière "hard", c'est-à-dire étendre la classe DefaultModelBinder et remplacer la méthode SetProperty. Voici un exemple:
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;
}
}
@fedorui merci pour le montage. Ce sera plus compréhensible. mais est-ce utile ou non? – Dilip0165