内置文件夹的ASP.Net视图文件夹 - 如何创建控制器

时间:2015-05-07 13:35:52

标签: c# asp.net asp.net-mvc razor

我想创建一个类似于: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。

我该如何解决这个问题?

2 个答案:

答案 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();
    }
}

enter image description here

答案 1 :(得分:1)

虽然路由可以解决您的问题,但这听起来像是MVC areas的工作。如果在您的实际应用程序中,您希望将站点的各个部分分开,那么区域可能就是解决方案。