【问题标题】:ASP.NET MVC: possible to move "Home" to area?ASP.NET MVC:可以将“家”移动到区域吗?
【发布时间】:2010-08-18 04:20:51
【问题描述】:

有人知道是否可以将 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。

有什么想法吗?

【问题讨论】:

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


【解决方案1】:

在应用您的路由之前,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。很着急,所以我没有尝试编译任何这些。

【讨论】:

  • 谢谢,但我无法让它工作。我正在使用 VS 开发环境进行本地测试。我用 Phil Haack 的路由调试器检查了它,但仍然无法获得指向我的 Home 区域的包罗万象的路由。
【解决方案2】:
// 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"
};

【讨论】:

  • 这不是很好解释 - 这段代码去哪里了,它有什么作用?
  • 这只是添加到默认视图位置,因此视图引擎将在更多位置查找视图。
猜你喜欢
  • 2011-04-09
  • 2011-08-07
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2017-02-19
相关资源
最近更新 更多