J'ai un contrôleur Products
avec l'action Details
qui a un identifiant et Slug qui fonctionne comme suit:ASP.NET MVC: Routing a besoin URL exacte pour travailler
routes.MapRoute(
"ProductDetails", // Route name
"{controller}/{action}/{id}/{title}", // URL with parameters
new { controller = "Products", action = "Details", id = "", title = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
L'URL: localhost/Products/Details/1
et localhost/Products/Details/1/my-slug
œuvres. Mais mettre ProductDetails
route au sommet casse toute mon application. Pour accéder à ma page d'accueil, mon URL doit ressembler à: localhost/Home/Index
.
localhost/Home
ou tout contrôleur de ce type ne fonctionne pas. Il demande qu'un paramètre nullable soit dans ces actions.
L'erreur:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'MyProject.Controllers.ProductsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Je viens de le faire. Cela a fonctionné, merci. Pourquoi est-ce si? Pourriez-vous expliquer dans une étape de comment ces deux routes fonctionnent? –
Étant donné que la route localehost/Home correspond aux définitions de route que vous avez définies et que la route de routage localhost/Home n'a pas de composant id, vous obtenez l'exception car le framework MVC tente d'attribuer une valeur nulle en raison de l'absence d'ID Paramètre et Int32 ne peut pas avoir une valeur nulle affectée. – Chandu