ASP.Net MVC View Architecture - PullRequest
       6

ASP.Net MVC View Architecture

3 голосов
/ 10 февраля 2009

Могут ли папки в представлении иметь подпапки? если так, как Контроллер достигает их? Например ... Я хотел бы, чтобы следующие URL работали правильно:

  • Администратор / Index
  • Администратор / Профиль / Index
  • Администратор / Профиль / Редактировать / 1
  • Администратор / Group / Index
  • Администратор / Группа / Редактировать / 1

Итак, я бы создал папку для профиля и группы как подпапку в Admin?

Я пробовал это и отобразить маршрут в глобальном файле, но, похоже, это не работает.

Ответы [ 4 ]

4 голосов
/ 10 февраля 2009

Похоже, вы пытаетесь создать панель администратора и помещаете другие действия, связанные с контроллером, в контроллер администратора. Я считаю, что это не самый эффективный способ. Вы можете просто сделать так:

Используйте RedirectToAction в качестве возврата, если это необходимо для ссылок администратора

  • Администратор / Индекс
  • Администратор / Профиль
  • Администратор / Группа

И положить на соответствующие контроллеры

  • Профиль / Index
  • Профиль / Редактировать / 1
  • Группа / Индекс
  • Группа / Редактировать / 1

Также добавьте [Authorize(Roles = "Administrator")] и [AcceptVerbs(HttpVerbs.Post)] для создания / редактирования / удаления действий

3 голосов
/ 12 февраля 2009

Вы можете создать свой собственный ViewEngine и переопределить, где искать файлы, примерно так

public class MyViewEngine : WebFormViewEngine
{
    public MyViewEngine()
    {
        ViewLocationFormats = new[] { 
            "~/{0}.aspx",
            "~/{0}.ascx",
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/Shared/{0}.aspx",
            "~/Views/Shared/{0}.ascx",
        };

        MasterLocationFormats = new[] {
            "~/{0}.master",
            "~/Shared/{0}.master",
            "~/Views/{1}/{0}.master",
            "~/Views/Shared/{0}.master",
        };
        PartialViewLocationFormats = ViewLocationFormats;

    }
}

Затем в вашем приложении начните добавлять

ViewEngines.Engines.Add(new MyViewEngine());
3 голосов
/ 10 февраля 2009

Просто сделайте обратное действие следующим образом:

return View("Profile/Index");

Это заставит контроллер найти «подпредставление». Для сопоставления URL-адресов с правильным контроллером вы можете использовать систему маршрутизации, но игнорируйте подпредставление, просто сопоставьте с правильным контроллером и позвольте контроллеру обработать правильный вид.

1 голос
/ 11 февраля 2009

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

Создание MVC "Области" в качестве подпапок в представлениях

Код доступен, так что вы можете проверить, как все сделано, но в основном заменяет ViewEngine на другой, аналогичный исходному, но с другим управлением местоположениями вида и регистрирует маршруты в соответствии с определенными областями.

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