Asp.net mvc 多动作MVC中的路由问题

Asp.net mvc 多动作MVC中的路由问题,asp.net-mvc,Asp.net Mvc,路由 public ActionResult Browse(string country , string serachQuery , int? jobCategoryId , string jobCategory) { } 链接1 routes.MapRoute( name: "search", url: "Job/Browse/{country}/{serachQuery}/{jobCategoryId}/{jobCat

路由

 public ActionResult Browse(string country , string serachQuery , int?  jobCategoryId , string jobCategory)
    {
    }
链接1

 routes.MapRoute(
            name: "search",
            url: "Job/Browse/{country}/{serachQuery}/{jobCategoryId}/{jobCategory}",
            defaults: new { controller = "Job", action = "Browse", country = UrlParameter.Optional, serachQuery = UrlParameter.Optional, jobCategoryId = UrlParameter.Optional, jobCategory = UrlParameter.Optional }
            );



        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}",
            defaults: new { controller = "Job", action = "Browse" }
            );
如何显示链接1,如下所示

http://{URL}/Job/Browse/12/engineers

更改链接

http://{domain}/Job/Browse/Dubai

您缺少一个关键信息,即如果之前至少缺少一个可选参数,则无法使用可选路由参数

因此,根据您提供的路线定义,可以使用以下路线:

  • Job/Browse/{country}/{serachQuery}/{jobCategoryId}/{jobCategory}
  • Job/Browse/{country}/{serachQuery}/{jobCategoryId}
  • Job/Browse/{country}/{serachQuery}
  • Job/Browse/{country}
  • 工作/浏览
以下路线不可能(一些示例):

  • Job/Browse/{jobCategodyId}

  • 作业/浏览/{serachQuery}/{jobCategory}

    等等

我的第一个建议是你检查一下。使用该选项,可以根据是否可以在管线参数上定义其他约束来实现

例如,{country}是一个字符串。我猜{searchQuery}也是一个字符串。但是{jobCategoryId}是一个int

因此,您可以定义一个新路由,Job/Browse/{jobCategoryId?:int}/{jobCategory?}。这不会与您的第一个路由冲突,因为{country}是一个字符串,{jobCategoryId}肯定是一个int。使用AttributeRouting,您也可以使用正则表达式

我想你明白了

<a href="@Url.Action("Browse","Job", new { country=  @country.Value })">@country.Value</a>
http://{domain}/Job/Browse/Dubai
<a href="@Url.Action("Browse", new{country="/",serachQuery ="/",jobCategoryId = Model.JobCategoryList[i].LookUpId ,  jobCategory=  Gulfjobs.Common.Convert.ToSeoUrl(Model.JobCategoryList[i].Value )})" >@Model.JobCategoryList[i].Value</a>