代码之家  ›  专栏  ›  技术社区  ›  Dismissile

MVC路由不工作

  •  4
  • Dismissile  · 技术社区  · 14 年前

    更新:

    正如有人指出的,我的路线注册中缺少一个S。现在我有了第二个问题。

    这就是我想要它工作的方式:

    http://localhost/products/ -->产品控制器.index())

    http://localhost/products/3/apples -->产品控制器。详细信息(int?ID,string产品名称)

    这就是目前发生的事情:

    http://localhost/products 转到“我的详细信息”操作。

    我该如何设置这条路线?

    我在global.asx文件中设置了以下路由:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "ViewProduct",
            "products/{id}/{productName}",
            new { controller = "Products", action = "Details", id = 0, productName = "" } // Parameter defaults
        );
    
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }
    

    我有以下控制器:

    public class ProductsController : Controller
    {
        //
        // GET: /Products/
    
        public ActionResult Index()
        {
            IList<Product> products = new List<Product>
            {
                new Product { Id = 57349, ProductName = "Apple" },
                new Product { Id = 57350, ProductName = "Banana" }
            };
    
            return View(products);
        }
    
        public ActionResult Details(int? id, string productName)
        {
            Product p = new Product { Id = id.Value, ProductName = productName };
    
            return View(p);
        }
    }
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   jwsample    14 年前

    因为您已经为 id productName 路由引擎只是在它们丢失时为您填充它们,所以您对/产品的请求将插入这些默认值并转到细节操作。

    取出: id = 0, productName = "" 你会得到预期的行为。

    编辑

    考虑在其中包含一个action参数。由于您有一个默认操作,并且没有办法覆盖它,所以您可能会将所有内容都路由到详细信息。

        2
  •  3
  •   mathieu    14 年前

    您的路线声明中缺少“S”

    action=“详细信息 S

    或者你的行动名称中有一个超过“S”的:

    公共操作结果详细信息 S (int?ID,string产品名称)

    由你决定改正哪一个;)

    更新:对于路线更新,只需使用:

    routes.MapRoute(
        "ViewProduct",
        "products/{id}/{productName}",
        new { 
            controller = "Products", 
            action = "Details" }
    );
    

    因此,当您键入/产品时,将使用“默认”路径。