ASP.NET MVC:可以将“Home”移动到区域吗?

时间:2010-07-07 17:54:06

标签: asp.net asp.net-mvc-2 asp.net-mvc-areas

任何人都知道是否可以将HomeController和Home相关视图移动到Areas目录中?

我正在努力让我的根目录保持良好和干净,并且如果可以的话,避免使用〜/ Views和〜/ Controllers目录。此外,我可以看到它导致一些混乱,因为必须解释这些根文件夹仅用于主页内容,而其他所有内容都存在于Areas文件夹中。我想这不符合我的组织意识。

我最接近的是使用以下内容进行我的家庭区域路线注册:

context.MapRoute(
    "Home_default",
    "Home/{action}/{id}",
    new { controller="Home", action = "index", id = UrlParameter.Optional }
);

......但这并不仅仅是“www.mydomain.com/”。为此,我需要告诉Global.asax中的“catch all”路由以某种方式将请求发送到我的Home区域。简单地将area =“Home”添加到路径数据不起作用。对“/”的请求仍在我的根目录中查找HomeController和Views。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在应用路由之前,IIS可能会在请求URL中添加“default.aspx”或某些默认文档名称,在这种情况下,您的示例将无效。 (这可以在IIS中配置。)

您需要这样的路线

context.MapRoute(
   "Home_root"
   ,"/"
   ,new { controller="Home", action="index", id=UrlParameter.Optional }
);

但是,当然,路线不能以“/”,“〜”等开头。

context.MapRoute(
   "Home_root"
   ,"default.aspx{*parameters}" /// or .htm, .asp, .html or whatever IIS may be adding 
   ,new { controller="Home", action="index", id=UrlParameter.Optional }
);

HTH。匆忙,所以我没有尝试编译任何这个。

答案 1 :(得分:0)

// These additions allow me to route default requests for "~/" to the "home" area
engine.ViewLocationFormats = new string[] { 
    "~/Views/{1}/{0}.aspx",
    "~/Views/{1}/{0}.ascx",
    "~/Areas/{1}/Views/{1}/{0}.aspx", // new
    "~/Areas/{1}/Views/{1}/{0}.ascx", // new
    "~/Areas/{1}/Views/{0}.aspx", // new
    "~/Areas/{1}/Views/{0}.ascx", // new
    "~/Views/{1}/{0}.ascx"
};