2017-01-25 2 views
3

Ich schrieb meine Routen so.RedirectToAction leitet falsch mit anderen Namespaces asp.net mvc

routes.MapRoute(
    name: "AdminECommerce", 
    url: "Admin/ECommerce/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "AdminEcommerce.Controllers" } 
); 

routes.MapRoute(
    name: "ECommerce", 
    url: "ECommerce/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "Ecommerce.Controllers" } 
); 

routes.MapRoute(
    name: "User", 
    url: "Plugin/User/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "User.Controllers" } 
); 

routes.MapRoute(
    name: "UserRegistration", 
    url: "Plugin/UserRegistration/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "UserRegistration.Controllers" } 
); 

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

Wenn ich will in demselben Controller RedirectToAction von einer Aktion auf andere Aktion verwenden, sonst Es Leitet Irgendwo.

Für Beispiel, ich will es mir

Aber, sendet mir

Plugin/UserRegistration/Register/Register 
zu

Admin/ECommerce/Register/Register 

ich schon erwähnt, haben umleiten, dass mein Controller in anderen Bibliotheken sind.

Was ist falsch an meinem Code?

Update: Controller-Registration

public ActionResult Register() 
    { 
     ViewBag.securityQuestions = _dataRepository.GetContext().User_SecurityQuestion; 
     return View(); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult RegisterNewUser(User_User model, FormCollection collection) 
    { 

     try 
     { 
      // register new user 
       ... 
      return RedirectToAction("Register"); 
     } 
     catch 
     { 
      // making error messages 
       ... 
      return RedirectToAction("Register"); 
     } 

Ich habe auch versucht dies,

return RedirectToAction("Register","Registration"); 

Es funktioniert nicht.

+0

Zeigen Sie Ihre Controller-Code –

+0

zum Umleiten sehe ich diesen Weg 'AdminECommerce' zuerst eher als' UserRegistration' von Top-down-Route Reihenfolge ausgeführt, wenn sie sind in Bereichen können Sie Bereich Parameter in 'defaults' hinzufügen zwischen ihnen unterscheiden. –

+0

Ich habe keine Bereiche in meinem Projekt, sondern separate Klassenbibliotheken für jeden Teil meines Projekts. –

Antwort

2

ASP.NET MVC diese beiden Routen, wie die gleiche von UriTemplate

von oben nach unten
routes.MapRoute(
    name: "AdminECommerce", 
    url: "Admin/ECommerce/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "AdminEcommerce.Controllers" } 
); 

routes.MapRoute(
    name: "UserRegistration", 
    url: "Plugin/UserRegistration/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "UserRegistration.Controllers" } 
); 

MVC liest Tabelle Routing erkennt angeforderte URL mit UriTemplate übereinstimmen. In diesem Fall wird die erste Vorlage ausgewählt.

Verwenden Sie stattdessen RedirectToRoute.

return RedirectToRoute("Registration", new 
{ 
    controller = "Registration", 
    action = "Register" 
}); 
+2

für den ersten Parameter Ich ersetzte "Registrierung" mit "UserRegistration" und jetzt funktioniert es gut, Danke. –

+0

Ich bin froh zu helfen :) – Marusyk

+0

Ich kann bestätigen, dass dies der Fall ist. Ich hatte das gleiche Problem. Der einfachste Weg war, für Action-Methoden und Klassennamen keine Namen zu haben. Aber ich hoffe, dass dies irgendwie verbessert wird. :/Die zweite Option ist eine Umleitung zu URL anstelle von redirectToAction wie folgt: 'Redirect (" http://www.google.com/ ")'. – JedatKinports

Verwandte Themen