ASP.NET MVC: можно ли переместить «Домой» в область? - PullRequest
2 голосов
/ 07 июля 2010

Кто-нибудь знает, возможно ли переместить связанные представления HomeController и Home в каталог Areas?

Я пытаюсь сохранить мой корневой каталог красивым и чистым и избегать использования ~ / Views и ~ / Controllersкаталоги, если я могу.Кроме того, я вижу, что это вызывает некоторую путаницу, объясняя, что эти корневые папки предназначены только для домашней страницы, а все остальное находится в папке «Области».Полагаю, это просто не соответствует моему пониманию организации.

Самое близкое, что я получил, - это использование следующего для регистрации маршрута в своей родной области:

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

...Но это не ловит просто "www.mydomain.com/".Для этого мне нужно указать мой маршрут «поймать все» в Global.asax, чтобы каким-то образом отправить этот запрос в мою домашнюю область.Простое добавление area = "Home" к данным маршрута не сработало.Запрос на "/" все еще ищет HomeController и Views в моем корневом каталоге.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 августа 2010
// 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"
};
0 голосов
/ 07 июля 2010

Возможно, что IIS добавляет «default.aspx» или какое-либо имя документа по умолчанию к URL-адресу запроса перед применением ваших маршрутов, в этом случае ваш пример не будет работать. (Это можно настроить в 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 }
);

НТН. В спешке, поэтому я не пытался скомпилировать ничего из этого.

...