Routage ASP.NET MVC 3

J’essaie de créer un itinéraire.

Lequel est

/emlak/TITLE/number.aspx 

tel que

 /emlak/Here_is_your_best_property/123456.aspx 

Global.asax:

 routes.MapRoute( "Product", "{controller}/{deli}/{productId}", new { controller = "emlak", action = "Index" }, new { productId = UrlParameter.Optional , deli = UrlParameter.Optional } ); 

Mon contrôleur

 namespace emrex.Controllers { public class EmlakController : Controller { // // GET: /Emlak/ public ActionResult Index(Ssortingng productId, Ssortingng deli) { return View(); } } } 

et j’obtiens l’erreur suivante:

Erreur serveur dans l’application ‘/’

La ressource est introuvable.

Merci pour l’aide.

Votre problème est (du moins lorsque j’ai essayé votre code) que vous avez des contraintes de route spécifiées là où elles ne devraient vraiment pas être. J’ai pu obtenir que cela fonctionne parfaitement en faisant:

      routes.MapRoute (
     "Produit",
     "{controller} / {deli} / {productId}",
     new {controller = "emlak", action = "Index", productId = UrlParameter.Optional, deli = UrlParameter.Optional}
 )

Essayez cela – une différence?

Ne spécifiez pas les parameters d’URL par défaut (comme vous l’avez fait)

Lorsque vous définissez votre itinéraire comme (j’ai ajouté des commentaires supplémentaires pour que nous sachions ce que chaque partie représente)

 routes.MapRoute( // route name "Product", // Route URL definition "{controller}/{deli}/{productId}", // route values defaults new { controller = "emlak", action = "Index" }, // route values constraints new { productId = UrlParameter.Optional , deli = UrlParameter.Optional } ); 

Donc, fondamentalement, vous ne devez pas fournir de contraintes dans votre cas, ce qui le rend inutile. Mettez les deux derniers par défaut dans la route et gardez les contraintes en dehors de la définition de cette route comme:

 routes.MapRoute( "Product", "{controller}/{deli}/{productId}", new { controller = "Emlak", action = "Index", productId = UrlParameter.Optional, deli = UrlParameter.Optional } ); 

Cela devrait certainement fonctionner sauf si vous avez d’autres définitions d’itinéraire ou si vous n’utilisez pas le code que vous avez fourni.

Cela peut aider, car je n’ai pas encore mis à jour MVC 1.0 …

Je ne pense pas que vous ayez besoin de la partie .aspx de l’URL car MVC gère l’instanciation des applications différemment. Vous devez également avoir une extension .mvc si vous utilisez IIS 6 (par exemple, “emlak.mvc / TITLE / number”); IIS 7 devrait instancier correctement avec “emlak / TITLE / number”.

Vous devez supprimer les contraintes et fournir les parameters par défaut pour “productId” et “deli”.

 routes.MapRoute( "Product", "{controller}/{deli}/{productId}", new { controller = "emlak", action = "Index", productId = 123 , deli = "xyz" } ); 

OU

rendre vos parameters optionnels lors de l’action dans votre contrôleur

 public ActionResult Index(Ssortingng productId = 0, Ssortingng deli = "") { return View(); } 

Votre action nécessite que deli et productId soient tous deux fournis et votre itinéraire ne fournit pas de valeurs par défaut pour les deux. Ajoutez une action Index qui ne nécessite aucune valeur, ou ajoutez des valeurs par défaut pour vos variables.

Counsellorben