ASP.NET MVC 3 - Настройка маршрутов - PullRequest
0 голосов
/ 12 февраля 2012

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

У меня есть контроллер с именем «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' или его мастер не найдены, или никакой движок представления не поддерживает искомые местоположения. Были найдены следующие места: ~ / Views / внутренний / View1.aspx ~ / Views / внутренний / View1.ascx ~ / Views / Shared / View1.aspx ~ / Views / Shared / View1.ascx ~ / Views / приборная панель / View1.cshtml ~ / Views / приборная панель / View1.vbhtml ~ / Views / Shared / View1.cshtml ~ / Views / Shared / View1.vbhtml

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

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2012

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

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 ищет представления в каталогах, определенных соглашением ... и конвекция:

* * 1010

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

~/Views/Internal/View1.cshtml

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...