J'ai une classe d'exception personnalisée:ASP.NET MVC 2 Modèle erreurs avec des exceptions personnalisées
public class MyException: Exception
{
public MyException(MyExceptionEnum myError) : base(myError.ToDescription()) { }
public MyException(MyExceptionEnum myError, Exception innerException) : base(myError.ToDescription(), innerException) { }
}
.ToDescription
est une méthode d'extension sur MyExceptionEnum
pour fournir des cartes ENUM à chaîne pour les détails de l'erreur d'exception.
Voilà comment je jette:
if (someCondition)
throw new MyException(MyExceptionEnum.SomeError);
donc j'utiliser mon premier cteur, ce qui crée une nouvelle exception avec un message donné.
maintenant sur le contrôleur:
[HttpPost]
public ActionResult UpdateFoo(Foo model)
{
try
{
_fooService.UpdateModel(model);
_unitOfWork.Commit();
}
catch(MyException myException)
{
ViewData.ModelState.AddModelError("ModelErrors", myException);
}
return View("Index", model);
}
Et enfin un extrait de la vue:
ne fonctionne pas (exception est levée quand je débogage, erreur est ajouté pour modéliser l'état, mais rien n'est montré sur la page).
Mais si je change à la ligne suivante:
ViewData.ModelState.AddModelError("ModelErrors", myException.Message);
Il fonctionne.
AddModelError
a deux surcharges:
-
chaîne
- , Exception (ne fonctionne pas pour moi) string
- , string (travaux)
Quelle est l'utilisation de la première surcharge alors ? Mon exception a un message d'exception interne, donc j'aurais pensé que l'extension HTML rendrait cela?
Comment gérer les exceptions personnalisées avec le ModelState alors? L'utilisation de la seconde surcharge est-elle correcte?
+1 sur le q; J'ai remarqué que cela se produisait une fois avec une exception CLR; J'ai fini par le changer pour utiliser '.Message' et me suis dit que j'y réfléchirais plus tard. : P –
:) Oui, je suis tenté de faire "oh, on dirait .Message fonctionne, c'est assez bon". Mais étant un bon petit développeur, je veux savoir pourquoi. – RPM1984