ASP.NET MVC 3路由

我正在尝试创建路线。

这是

/emlak/TITLE/number.aspx 

 /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 } ); 

我的控制器

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

我得到下一个错误:

‘/’应用程序中的服务器错误。

无法找到该资源。

感谢帮助。

您的问题是(至少在我尝试您的代码时)您指定了路径约束,而不是它们。 通过这样做,我能够让这个工作得很好:

      routes.MapRoute(
     “产品”,
     “{控制器} / {熟食店} / {的productId}”,
     new {controller =“emlak”,action =“Index”,productId = UrlParameter.Optional,deli = UrlParameter.Optional}
 );

试试 – 有什么不同吗?

不要提供URL参数默认值作为约束(就像你一样)

当你定义你的路线时(我添加了额外的评论,所以我们知道每个部分是什么)

 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 } ); 

所以基本上你不应该在你的情况下提供约束,这使得它毫无意义。 将最后两个放在路由默认值中,并将约束保留在此路由定义之外:

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

除非您有其他路径定义或不使用您提供的代码,否则这绝对可以使用。

可能会有所帮助,因为我还没有从MVC 1.0升级……

我认为您不需要URL的.aspx部分,因为MVC以不同方式处理应用程序实例化。 如果使用IIS 6,您还需要.mvc扩展名(例如“emlak.mvc / TITLE / number”); IIS 7应该使用“emlak / TITLE / number”正确实例化。

您应该删除约束并提供“productId”和“deli”的结果。

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

要么

在控制器中的操作中使您的参数可选

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

您的操作需要提供deli和productId,并且您的路由不会为其中任何一个提供默认值。 添加不需要提供任何值的Index操作,或添加变量的默认值。

counsellorben