2015-11-27 3 views
1

У меня есть страница вакансий, где есть несколько параметров, таких как jobType, рабочая нагрузка и т. Д. На странице могут быть или нет какие-либо/все параметры.Карта маршрута MVC не работает должным образом

Карта маршрутов:

 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 } 
     ); 

Controller (частичный метод код):

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 

Спасибо за вашу помощь.

Rohan.

+0

Вы маршрут имеет '/ Работа/Index/{нагрузка}/{jobType}' - если вы не хотите 'Index' в нем, а затем изменить его на'/Работа/{нагрузки}/{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 } 
); 

Или если вы хотите сделать атрибут маршрутизации путь,

Включить атрибут маршрутизации в RegisterRoutes методе RouteConfig.cs

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

    //default route definition goes here 
} 

и украсить ваш метод действия с атрибутом маршрутов.

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(); 
    } 
} 
Смежные вопросы