2012-02-12 6 views
0

Я переношу приложение ASP.NET для веб-форм в ASP.NET MVC 3. Я как бы понимаю маршрутизацию, но я вроде как не знаю. В моем приложении я создал три файла .cshtml в каталоге, расположенном по адресу/internal/products/find /. Для демонстрации эти файлы .cshtml называются «view1.cshtml», «view2.cshtml» и «view3.cshtml».ASP.NET MVC 3 - Настройка маршрутов

У меня есть контроллер с именем «InternalController». Моя цель - использовать InternalController для всех мест внутри/внутреннего пути. Я не уверен, разрешено ли то, что я пытаюсь сделать. Я предполагаю, что это так. В любом случае, в это время, у меня есть следующие в InternalController:

public ActionResult View1() 
{ 
    return View(); 
} 

public ActionResult View2() 
{ 
    return View(); 
} 

public ActionResult View3() 
{ 
    return View(); 
} 

В моем файле Global.asax.cs я пытаюсь зарегистрировать маршруты к этим взглядам следующим образом:

routes.MapRoute(
    "View1", 
    "{controller}/products/find/view1", 
    new { controller = "Internal", action = "View1" } 
); 

routes.MapRoute(
    "View2", 
    "{controller}/products/find/view2", 
    new { controller = "Internal", action = "View2" } 
); 

routes.MapRoute(
    "View3", 
    "{controller}/products/find/view3", 
    new { controller = "Internal", action = "View3" } 
); 

Всякий раз, когда я пытаюсь посетить/internal/products/find/view1 в своем браузере, я вижу экран ошибок ASP.NET, и он говорит:

Вид «View1» или его хозяин не найден или нет механизма просмотра поддерживает найденные местоположения. Были обысканы следующие адреса: ~/Просмотры/внутренний/View1.aspx ~/Просмотры/внутренний/View1.ascx ~/Views/Shared/View1.aspx ~/Views/Shared/View1.ascx ~/Просмотры /dashboard/View1.cshtml ~/Views/приборная панель/View1.vbhtml ~/Просмотров/Shared/View1.cshtml ~/Views/Shared/View1.vbhtml

Что я делаю неправильно? Путь/внутренний/products/find/view1 - самая важная часть для меня. В идеале я бы хотел разоблачить это в InternalController каждый раз. Но я очень грубо разбираюсь в этом. Что я делаю не так?

Спасибо!

ответ

0

Когда вы пишете

routes.MapRoute(
    "View1", 
    "{controller}/products/find/{action}", 
    new { controller = "Internal", action = "View1" } 
); 

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

http://mysite.com/blahblah/products/find/blahblahview 

он активирует действие view1 внутри контроллера blahblahview. Но это не значит, что файл view1.cshtml находится на этом пути. На самом деле, asp.net MVC выглядит для представлений в каталогах, определенных по соглашению ... и convetion является:

~/Views/ControllerName/ViewName 

так, ваше мнение должно быть в папке:

~/Views/Internal/View1.cshtml 

В отличие от ASP.NET WebForms вы привыкли, ASP.NET MVC в значительной степени управляется соглашениями об именах, как вы могли бы видеть (вы всегда называете ваши контроллеры, такие как BlahBlah * Контроллер *, вы всегда размещаете свои представления в папке «Виды» и т. д. ... Прочитайте несколько руководств here и догонять основы.

+0

Мои файлы .cshtml находятся в каталоге/products/find. Как обновить мои контроллеры или маршруты, чтобы использовать эти представления? –

+0

Я бы этого не сделал (просто скопируйте файлы в папку просмотра по умолчанию), но если вы действительно хотите это сделать, вот ответ: http://stackoverflow.com/questions/909794/how-to-change- по умолчанию ракурса-расположение-схема-в-Asp-нетто-MVC –

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