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, созданный David Ebbo, который делает именно это.
В документации по 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.