我想创建一个类似于:localhost:port / farm / animals / cow.cshtml的URL。 如何为/ animals /后面的页面创建一个控制器?
如果我创建标准:
public class FarmController : Controller
{
//
// GET: /Farm/
public ActionResult Cow()
{
return View();
}
}
我不会到那里因为cow.cshtml是在动物身后。 我也不会使用以下代码访问cow.cshtml:
public class AnimalsController : Controller
{
//
// GET: /Animals/
public ActionResult Cow()
{
return View();
}
}
因为cow.cshtml的链接不是/ animals /但是/ farm / animals / cow。
我该如何解决这个问题?
答案 0 :(得分:2)
您需要注册以下路线 -
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Animals",
url: "farm/animals/{action}",
defaults: new { controller = "Farm" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
public class FarmController : Controller
{
// GET: Farm
public ActionResult Index()
{
return View();
}
// GET: Farm/Animals
public ActionResult Animals()
{
return View();
}
// GET: Farm/Animals/Cow
public ActionResult Cow()
{
return View();
}
}
答案 1 :(得分:1)
虽然路由可以解决您的问题,但这听起来像是MVC areas的工作。如果在您的实际应用程序中,您希望将站点的各个部分分开,那么区域可能就是解决方案。