ASP.NET MVC3 Как ссылаться на представления непосредственно с контроллера

В моем контроллере я хочу указать другой вид, чем по умолчанию. Вот так:

public ActionResult EditSurvey(Int32 id)
    {

        Survey survey = _entities.Surveys.Single(s => s.Id == id);

        return View("Survey",survey);
    }

Но вместо указания представления в виде строки ( "Опрос" ) я хотел бы ссылаться на нее напрямую, поэтому, если я позже захочу изменить имя моего представления, мне не нужно вручную менять эту строку.

Итак, я ищу что-то вроде этого:

public ActionResult EditSurvey(Int32 id)
    {

        Survey survey = _entities.Surveys.Single(s => s.Id == id);

        return View(Views.Admin.Survey,survey);
    }

Ответ 1

Хороший вопрос: встроенная поддержка отсутствует, поскольку метод View() ожидает строку, но есть инструмент Nifty, называемый T4MVC созданный Дэвид Эббо, который делает именно это.

В документации на codeplex есть процедура ручной установки, я бы порекомендовал получить ее с диспетчером пакетов NuGet прямо из VS2010.

Его довольно просто, все это файлы, которые вы можете просто добавить в свой проект. (T4MVC.tt и T4MVC.settings.t4), каждый раз, когда вы меняете свой код, (1) Щелкните правой кнопкой мыши T4MVC.tt и (2). Нажмите "Запустить пользовательский инструмент".

Что он делает, это сгенерировать класс с подклассами, членами, свойствами для всех ваших контроллеров и представлений. То, что он делает, это создавать сильные типы для всего вашего контента, такие как изображения, css, js и т.д. (Что, я думаю, просто потрясающе)

Примеры:
Это

@Html.RenderPartial("DinnerForm");

Будет:

@Html.RenderPartial(MVC.Dinners.Views.DinnerForm);

Это:

@Html.ActionLink("Delete Dinner", "Delete", "Dinners", new { id = Model.DinnerID }, null)

Вместо этого:

@Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID))

Это:

<img src="/Content/nerd.jpg" />

Вместо этого:

<img src="@Links.Content.nerd_jpg" />

Вам нужно щелкнуть правой кнопкой мыши по файлу tt и "Запустить пользовательский инструмент", как упоминалось ранее, каждый раз, когда вы меняете свои представления, контроллеры, однако, если вы хотите автоматизировать это, Проверьте Chirpy, который делает это и многое другое.

( Примечание T4MVC имеет примеры aspx/mvc2 в документах, но отлично работает на MVC3, как я использую при создании с приложением MVC3/Razor)

Также см. тег T4MVC на SO.