gpt4 book ai didi

c# - 我无法弄清楚 RouteConfig.cs 文件

转载 作者:行者123 更新时间:2023-11-30 19:56:01 25 4
gpt4 key购买 nike

我是 MVC 的新手,正在尝试构建我的第一个网站。我无法正确设置我的 RouteConfig 文件。我有 2 个规则适用于不同的 ActionResults。但是,只有其中一个可以正常工作。如果 GetProducts 高于 GetProductByCode,则 GetProducts 起作用。如果 GetProductByCode 高于 GetProducts,则 GetProductByCode 起作用。我究竟做错了什么?

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "GetProducts",
url: "{controller}/{action}/{PageNo}",
defaults: new { controller = "Home", action = "GetProducts", PageNo = UrlParameter.Optional }
);

routes.MapRoute(
name: "GetProductByCode",
url: "{controller}/{action}/{ProductCode}",
defaults: new { controller = "Home", action = "GetProductByCode", ProductCode = UrlParameter.Optional }
);

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

我的解决方案如下

routes.MapRoute(
name: "GetProducts",
url: "{controller}/GetProducts/{PageNo}",
defaults: new { controller = "Home", action = "GetProducts", PageNo = UrlParameter.Optional }
);

routes.MapRoute(
name: "GetProductByCode",
url: "{controller}/GetProductByCode/{ProductCode}",
defaults: new { controller = "Home", action = "GetProductByCode", ProductCode = UrlParameter.Optional }
);

最佳答案

如果你查看默认路由:

    routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后将 url: 之后的部分视为一种格式或模式:

  • {控制者}
  • { Action }
  • {id}

您的 3 个网址 Home/GetProductsHome/GetProductsByCodeHome/Index 都匹配此模式。

{action} 部分分别为 GetProductsGetProductsByCodeIndex

如果您想将参数映射到 Action 中名为 PageNoProductCode 的变量,则需要利用路由,但通常您不需要路由对于每个可能的组合。如果您在这些操作中的参数是 id,那么它就可以正常工作,而无需为每个操作创建路由。

例如

public ActionResult GetProducts(int id) 
{
// stuff
}

public ActionResult GetProductsByCode(string id)
{
// stuff
}

要获得参数名称,请明确指定 Controller 和操作:

   routes.MapRoute(
name: "GetProducts",
url: "Home/GetProducts/{PageNo}",
defaults: new { controller = "Home", action = "GetProducts", PageNo = UrlParameter.Optional }
);

routes.MapRoute(
name: "GetProductByCode",
url: "Home/GetProductsByCode/{ProductCode}",
defaults: new { controller = "Home", action = "GetProductByCode", ProductCode = UrlParameter.Optional }
);

public ActionResult GetProducts(int PageNo) 
{
// stuff
}

public ActionResult GetProductsByCode(string ProductCode)
{
// stuff
}

但一般来说,只定义不同于普通 {controller}/{action}/{id} 模式的自定义路由。


MapRoute 的默认部分意味着,如果它找不到您的代码库中存在的 controlleraction,请改用它们.这是后备,而不是功能驱动程序。

关于c# - 我无法弄清楚 RouteConfig.cs 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35140903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com