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.

Другие вопросы по тегам