我正在使用.Net MVC 4为客户构建一个站点。整个站点使用默认的MVC 4路由,所有页面都可以正常工作
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
)
网站上有一个名为“教师”的页面。对于此页面,有几个链接可将您带到“教师”页面子集的新页面。客户端希望url结构看起来像这样
万维网。{mysite的}的.com /学校/教师/应用
万维网。{mysite的}的.com /学校/教师/优点
我想我可以简单地在我的SchoolController中将Apply和Benefits页面添加为ActionResult,然后使用MVC中的路由功能将url映射到SchoolController中正确的ActionResult方法。
这是我的控制者:
public class SchoolController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Administration()
{
return View();
}
public ActionResult Teachers()
{
return View();
}
public ActionResult Apply()
{
return View();
}
public ActionResult Benefits()
{
return View();
}
}
这是我尝试的自定义路线。
routes.MapRoute(
"Teachers",
"{controller}/{page}/{action}",
new { controller = "School", page = "Teachers", action = "Index" }
)
我将此路线放在默认路线之前,但这会将“老师”添加到网站上的每个网址,如下所示:
万维网。{mysite的}的.com / {控制器} /教师/ {动作}
概要
我网站上的所有网页都使用此网址结构:
万维网。{mysite的}的.com / {控制器} / {动作}
然而,这一页具有以下结构:
万维网。{mysite的}的.com / {控制器} /教师/ {动作}
如何使用路线执行此操作?
答案 0 :(得分:1)
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "TeachersActions",
url: "School/Teachers/{action}",
defaults: new { controller = "School" },
constraints: new { action = "Apply|Benefits" } // actions under Teachers
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
您希望在教师下进行的任何操作都应添加到路线中。实际上没有必要为此路由指定操作或页面的默认值(除非您确实需要捕获页面路由值)。这里的问题是用户仍然可以通过输入URL School/{action}
来定位教师下的操作,因为它被默认路由捕获。现在这可能是也可能不是你的担忧。我个人认为这不是一个大问题,因为用户应该只是使用网站的导航,而不是手动输入网址。