2017-05-09 1 views
0

J'ai quelques routes personnalisées configurées et il semble interférer avec mon contrôleur. L'action GET Index fonctionne correctement, mais si l'action POST Index renvoie la vue, quelque chose ne va pas. Il finit par aller à un itinéraire différent ou quelque chose. Donc je vais à mon site Web ici http://mywebsitehere/sms et il traverse l'action GET Index et il rend le formulaire.Personnalisé RouteConfig interférer avec HttpPost return Afficher()

Lorsque je soumets le formulaire, il exécute l'action POST et si ModelState n'est pas valide, il obtient la ligne return View(model). Ensuite, j'obtiens une erreur dans mon NavigationController parce qu'il essaie d'obtenir un RouteData qui n'est pas là. Il ne devrait jamais finir dans mon NavigationController.

Mon itinéraire:

routes.MapRoute(
    name: "Notifications", 
    url: "sms/{action}/{id}", 
    defaults: new { controller = "SMS", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "Conference", 
    url: "conf/{conferenceCode}/{controller}/{action}", 
    defaults: new { conferenceCode = "", controller = "Home", action = "Overview" } 
); 

Voici un exemple de mon contrôleur:

public ActionResult Index() 
{ 
    ViewBag.IsHome = true; 
    ViewBag.Theme = "a"; 

    return View(); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Index(SendSMSPageViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // DO STUFF HERE 

     ModelState.Clear(); 

     return RedirectToAction("Index"); 
    } 

    return View(model); 
} 

Enfin mon avis:

@using (Html.BeginForm("Index", "SMS", FormMethod.Post, new { data_ajax = "false" })) 
{ 
    @Html.AntiForgeryToken() 
    @* My Form stuff here *@ 
} 
+0

essayez d'utiliser 'return View (" Index ", modèle);' et voyez si cela résout? Quelle erreur votre navigationController lance-t-elle exactement? Et quel RouteData attend-il/recherche-t-il? – Bardicer

+0

Le problème est que NavigationController ne devrait pas fonctionner du tout avec cette vue. Donc, l'erreur et RouteData ne sont pas pertinents. J'ai fait le changement au retour et ça fait toujours la même chose. – Kevin

Répondre

0

Ce fut un bug de ma part. Quelqu'un m'a donné quelques conseils et j'ai compris le problème. Une partie du code que je ne poste avant:

ViewBag.IsHome = false; 

Ce fut dans mon GET, mais pas mon POST et sans elle court une vue partielle que je ne voulais pas courir.