2015-11-27 105 views
1

我有一個工作頁面,其中有多個參數,比如jobType,工作負載等。 頁面可能有也可能沒有任何/所有參數。MVC路線圖無法正常工作

的RouteMap:

 routes.MapRoute(
     "JobsRoute", 
     url: "Jobs/Index/{workload}/{jobType}", 
     defaults: new { controller = "Jobs", action = "Index", workload = UrlParameter.Optional, jobType = UrlParameter.Optional } 
    ); 

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

控制器(部分方法代碼):

public ActionResult Index(string workload = "", string jobType = "") 
    { 
     SearchJobs model = new SearchJobs(); 

     using (var context = new OutsourceEntityContext()) 
     { 
      model.lstJobs = context.Jobs.ToList(); 
      if (!workload.Equals("")) 
      { 
       int jobWorkloadKey = context.JobWorkload.Where(t => t.Name.Equals(workload)).First().Key; 
       model.lstJobs = model.lstJobs.Where(t => t.WorkloadKey == jobWorkloadKey).ToList(); 
      } 

     } 
    } 

我想這樣的URL的工作:

http://localhost:51576/Jobs/workload/15-20%20hours%20per%20week 
http://localhost:51576/Jobs/workload/15-20%20hours%20per%20week/jobType/Hourly 

感謝您的幫助。

羅漢。

+0

您的路線有'/ Jobs/Index/{工作負載}/{jobType}' - 如果您不想'Index',則將其更改爲'/ Jobs/{workload}/{jobType }'但它不清楚你期望你的第二個例子打 - 這是一個完全不同的路線 –

+0

第二個也應該擊中同一個頁面,第二個參數有一些價值..(非空) –

+0

在第二個中你有4個路線值(你的定義只有2)。如果您使用路線,只有最後一個參數可以選擇。不清楚你試圖做什麼 –

回答

0

由於您需要url中的工作類型和工作量,因此您應該在定義路由時指定。

routes.MapRoute(
    name: "Jobs", 
    url: "Jobs/workload/{workload}", 
    defaults: new { controller = "Job", action = "Index", 
                 workload = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "JobsWithJobType", 
    url: "Jobs/workload/{workload}/jobtype/{jobType}", 
    defaults: new { controller = "Job", action = "Index", 
                 jobType = UrlParameter.Optional} 
); 

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

或者如果你想要做的屬性路由方式,

啓用屬性在RouteConfig.cs

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

    //default route definition goes here 
} 

RegisterRoutes方法路由和屬性的路由裝飾你的操作方法。

public class JobsController : Controller 
{ 
    [Route("jobs/workload/{workload}/jobtype/{jobtype?}")] 
    [Route("jobs/workload/{workload?}")] 
    [Route("jobs")] 
    public ActionResult Index(string workload = "", string jobType = "") 
    { 
     return View(); 
    } 
}