MVC Url Routing Для пользовательских URL - PullRequest
2 голосов
/ 14 марта 2012

Я хочу передать URL-ссылку, как

http://localhost:24873/Jobs/[companyname]
or
http://localhost:24873/[companyname]/Jobs/ (Preferred)

Я попробовал ниже маршрутизацию в глобальном файле aspx и создал контроллер с именем Jobs and Index, результат действия с папкой Jobs, но не работает.

 routes.MapRoute(
             "JobList", // Route name
             "Jobs/{companyname}",
              new
              {
                  controller = "Jobs",
                  action = "Index",
                  companyname = string.Empty
              }
          );

И мой контроллер:

public partial class JobsController : Controller 
{ 
    public ActionResult Index() 
    { 
          JobsListModel model = new JobsListModel(); 
          return View(model); 
    } 
}

Что я делаю не так? Пожалуйста, помогите.

Ответы [ 4 ]

4 голосов
/ 14 марта 2012

Чтобы добавить к предыдущему ответу, если вы хотите, чтобы ваш предпочитаемый маршрут http://localhost:24873/[companyname]/Jobs/ работал, добавьте этот маршрут снова перед вашим маршрутом по умолчанию.

routes.MapRoute(
  "JobList", // Route name
  "{companyname}/Jobs",
  new
  {
     controller = "Jobs",
     action = "Index",
     companyname = string.Empty
  }
);
3 голосов
/ 14 марта 2012

Вы должны добавить этот маршрут в качестве первой записи в global.asax, в противном случае запрос будет перенаправлен на маршрут по умолчанию (или маршрут до него)

Источник

0 голосов
/ 18 марта 2012

Попробуйте это: -

//Default url

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    "Default",
    "", 
    new { controller = "Home", action = "Index", id = "" }
);

//others url rewriting you want

RouteTable.Routes.MapRoute(null, "Jobs/{companyname}", new { controller = "Jobs", action = "Index" });
0 голосов
/ 15 марта 2012

Вашему контроллеру заданий требуется действие индекса с именованным параметром имени компании, например:

public ActionResult Index(string companyname) 
{ 
      //Do some checking on the name
      JobsListModel model = new JobsListModel(); 
      return View(model); 
}

Возможно, вам все еще понадобится пустое действие:

public ActionResult Index() 
{ 
    return Index(string.Empty);
}

О, пропустил это. Как сказал парень, опередивший меня, чтобы заставить ваш второй URL работать, сделайте это: (http://localhost:24873/[companyname]/Jobs/)

routes.MapRoute(
  "JobList", // Route name
  "{companyname}/Jobs",
  new
  {
     controller = "Jobs",
     action = "Index",
     companyname = string.Empty
  }
);
...