В моем контроллере я хочу указать другой вид, чем по умолчанию.
Вот так:
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.