ASP.NET MVC routing - versucht zu haben, einen Namen in der URL
Ich habe derzeit die folgenden Strecken:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.gif/{*pathInfo}");
MvcRoute.MappUrl("{controller}/{action}/{ID}")
.WithDefaults(new { controller = "home", action = "index", ID = 0 })
.WithConstraints(new { controller = "..." })
.AddWithName("default", routes)
.RouteHandler = new MvcRouteHandler();
MvcRoute.MappUrl("{title}/{ID}")
.WithDefaults(new { controller = "special", action = "Index" })
.AddWithName("view", routes)
.RouteHandler = new MvcRouteHandler();
Den SpecialController hat eine Methode: public ActionResult Index(int ID)
Immer wenn ich meinen browser http://hostname/test/5
, bekomme ich die folgende Fehlermeldung:
Den Parameter-dictionary enthält einen null-Eintrag für den parameter 'ID' nicht-nullable-Typ 'System.Int32' für die Methode 'System.Web.Mvc.ActionResult Index(Int32)' in 'SpecialController'. Um einen parameter optional sein Typ sollte entweder ein Verweis oder ein Nullable-Typ.
Parameter name: Parameter
Beschreibung: Eine nicht behandelte Ausnahme ist aufgetreten während der Ausführung der aktuellen Webanforderung. Bitte überprüfen Sie die Stapelüberwachung für weitere Informationen über den Fehler und wo Sie Ihren Ursprung in den code.
Warum ist das so? Ich benutzte die mvccontrib route debugger, und es scheint, dass die route ist zugänglich wie erwartet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist genau so, wie die Fehlermeldung sagt. Du hast einen parameter mit der Bezeichnung "ID" hat keinen Standardwert, aber deine Methode erwartet einen non-nullable int. Da gibt es keinen Standardwert, Sie versucht sich zu übergeben, "null", aber... es kann nicht, weil dein int-parameter ist ungleich null.
Die route debugger wohl nicht check-Typen für null-Werte.
Um es zu beheben:
Ich denke, Sie sollten Ihre benutzerdefinierten route vor die Standard-Einstellung.
http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
Ich schlage vor, die Lösung war Ihre route Variablen-Namen nicht mit Ihren action-parameter-Namen.
Dieser funktionieren würde:
Wo dies nicht: