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