ASP.NET MVC路由奇怪或意外的行为

时间:2010-08-18 08:21:54

标签: c# asp.net-mvc

我是ASP.NET MVC的新手,正在研究使用ASP.NET MVC 2的电子商务应用程序。

对于所有场景,默认路由工作正常。但是我需要为URL定义我自己的规则,如下所示:

  1. http:// localhost / mvc2proj / products
  2. http:// localhost / mvc2proj / products / productname
  3. 为此,我在默认路由上方定义了一条新路由:

     routes.MapRoute(
            "Products", 
            "Products/{productName}",
            new { controller = "Products", action = "Index" }
     );
    

    主页显示时工作正常。也就是当URL为http:// localhost / mvc2proj时,菜单标题“Products”的锚标记的href属性为“href =”mvc2proj / Products“Products”。

    但是当URL是http:// localhost / mvc2proj / products / productname时,菜单标题“Products”的锚标记的href属性也会变为href =“mvc2proj / Products / productName”,这显然不是必需的。单独单击产品类别时,不应更改菜单href。它应保持不变。

    我将菜单定义为用户控件,如下所示:

    <li><%=Html.RouteLink("Home", new { Controller = "Main", Action = "Index" })%></li>
    <li><%=Html.RouteLink("Products", new{ Controller = "Products" } ) %></li>
    

    产品的子类别定义如下:

    <%foreach(var product in Model.Products) {%>
        <li><%=Html.RouteLink(Html.Encode(product.ProductName), new { controller = "Products", productName = product.ProductName })%></li>
    <%} %>
    

    子类别的HTML是:

    <li><a href="/mvc2proj/Products/Product1">Product1</a></li>
    <li><a href="/mvc2proj/Products/product2">Product2</a></li>
    

    .......等等。单击这些链接可更改菜单URL。

    请帮帮我。

1 个答案:

答案 0 :(得分:0)

这可能不是最佳解决方案,但我通过为索引页面定义与单个产品页面不同的路线来解决类似问题,例如:

routes.MapRoute(
"ProductIndex", 
"Products",
new { controller = "Products", action = "Index" }
);

这将是您现有路线的补充。我想我实际上为每个使用了不同的Action方法,但是如果你为参数提供了一个默认值,则没有必要。

我确信有更好的方法,这个解决方案来自对实际情况缺乏了解,但它可以帮助您解决眼前的问题!