MVC Url路由对于自定义URL

时间:2012-03-14 16:41:03

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我想传递像

这样的网址链接
http://localhost:24873/Jobs/[companyname]
or
http://localhost:24873/[companyname]/Jobs/ (Preferred)

我尝试在全局aspx文件中进行下面的路由,并使用Jobs文件夹创建名为Jobs和Index操作结果的控制器但不起作用。

 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 个答案:

答案 0 :(得分:4)

要添加到上一个答案,如果您希望首选路由http://localhost:24873/[companyname]/Jobs/正常工作,请在默认路由之前再次添加此路由。

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

答案 1 :(得分:3)

您必须将此路由添加为global.asax中的第一个条目,否则请求将路由到默认路由(或之前的路由)

Source

答案 2 :(得分:0)

您的作业控制器需要一个索引操作,其命名参数为companyname,如:

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

哦,错过了这个。就像我前面的那个人说让你的其他网址工作一样:(http:// localhost:24873 / [companyname] / Jobs /)

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

答案 3 :(得分:-1)

试试这个: -

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