2010-07-07 4 views
2

Кто-нибудь знает, можно ли перемещать просмотры HomeController и Home в каталог Areas?ASP.NET MVC: можно переместить «Главная» в область?

Я стараюсь, чтобы мой корневой каталог был чистым и чистым, и избегайте наличия файлов ~/Views и ~/Controllers, если можно. Более того, я вижу, что это вызывает некоторую путаницу, объясняя, что эти корневые папки предназначены только для домашней страницы, а все остальное - в папке Areas. Думаю, это просто не соответствует моему чувству организации.

Ближайший я пришел использует следующее для моей домашней зоны регистрации по маршруту:

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

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

Любые идеи?

+0

Это ближе вещь, которую я нашел, но это еще не решает его проблему наличия дубликатов «Обзор», «Контроллеры» и «Модель» папка в корне моего приложения: http://forums.asp.net/p/1530007/3706429.aspx –

+0

Нашли это тоже: http://efreedom.com/Question/1-2140208/how-to-set-a-default-route-to- an-area-in-mvc –

+0

Это похоже на (или очень похожее) на этот более ответный вопрос: http://stackoverflow.com/questions/2140208/how-to-set-a-default- route-to-an-area-in-mvc – Anthony

ответ

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" 
}; 
+0

Это не очень хорошо объяснено - куда идет этот код и что он делает? – Anthony

+0

Это просто добавляет к местоположению представления по умолчанию, поэтому механизм просмотра будет искать виды в большем количестве мест. –

0

Возможно, что перед применением маршрутов 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 } 
); 

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

+0

Спасибо, но я не мог заставить это работать. Я тестирую локально в среде VS dev. Я проверил его с отладчиком маршрута Фила Хаака и до сих пор не может получить маршрут, охватывающий весь мой маршрут. –

Смежные вопросы