J'ai deux contrôleurs:Quelle est la meilleure approche pour partager des données entre les contrôleurs dans ASP .NET MVC?
public class AController : Controller
{
public ActionResult AControllerAction()
{
if (// BControllerAction reported an error somehow)
{
ModelState.AddModelError("error-key", "error-value");
}
...
}
}
public class BController : Controller
{
public ActionResult BControllerAction()
{
try{Something();}
catch(SomethingExceprion)
{
// here I need to add error info data,
// pass it to AController and redirect to
// AControllerAction where this error will be added
// to model state
}
}
}
Je pense que je peux faire quelque chose comme:
public ActionResult BControllerAction()
{
try{Something();}
catch(SomethingException)
{
var controller = new AController();
controller.ModelState.AddModelError("error-key", "error-value");
controller.AControllerAction();
}
}
Mais je suggère qu'il sera approche révolutionnaire architecture, et je ne veux pas faire comme ça. Y a-t-il un moyen plus simple et plus sûr, sauf de passer l'objet du modèle?
vous utilisez ModelState pour ouvrir une session des exceptions? –
@ Forty-Two, exception sera enregistrée dans le bloc 'catch (SomethingException)' par logger (j'ai simplifié ces détails pour me concentrer sur le problème principal qui m'intéresse), j'ai juste besoin d'informer l'utilisateur de cette erreur par l'action d'un autre contrôleur . – Dmytro
Votre approche est correcte. Vous pouvez exécuter un autre contrôleur et renvoyer son ActionResult. Voir [ici] (http://stackoverflow.com/questions/409049/net-mvc-call-a-controller-action-from-another-controller-action) – semao