Когда T4MVC будет поддерживать Razor с явными HtmlHelpers для частичного рендеринга?

Я уже некоторое время использую T4MVC, и мне нравится функция «явных HtmlHelpers для частичного рендеринга», которая по умолчанию отключена. Я использую T4MVC версии 2.6.40.

Недавно я обновился до MVC3 и заметил, что для партиалов Razor не создаются явные HtmlHelpers, поэтому я просмотрел исходный код текстового шаблона T4MVC и нашел метод с именем «GetPartials», который имеет следующую строку кода:

var parts = GetControllers()
        .Select(m => m.ViewsFolder)
        .SelectMany(m => m.Views)
        .Where(m => m.Value.EndsWith(".ascx"));

Итак, понятно, что представления Razor не поддерживаются.

Я также хотел бы упомянуть, что при запуске шаблона T4 (щелкните правой кнопкой мыши > запустить пользовательский инструмент) я получаю предупреждение компилятора, в котором говорится: «Компиляторы C# 2.0 и C# 3.5 больше не поддерживаются. Шаблоны всегда будут компилироваться с версией 4 вместо «v3.5», как указано».

Это относится к строке 18, где атрибут языка шаблона имеет значение «C#v3.5». Почему он должен иметь явную зависимость от версии? Разве это не может быть просто "C#"?

Извините, что задаю два разных вопроса в одном посте.


person Shayne    schedule 01.02.2011    source источник


Ответы (2)


Я только что выпустил T4MVC 2.6.42, чтобы решить эту проблему. Вы можете получить его из Codeplex или NuGet.

Обратите внимание, что для того, чтобы T4MVC определял файл Razor как частичный, его имя должно начинаться со знака подчеркивания (например, _foo.cshtml). Без этого ограничения мы бы закончили созданием вспомогательных методов для всех представлений, которые загрязнили бы вещи, а не добавили бы ценности. Обратите внимание, что группа разработчиков MVC обычно рекомендует использовать префикс частичных представлений Razor с префиксом _.

Что касается предупреждения, то оно не имеет отношения к делу и является безобидным. Чтобы избавиться от него, просто измените language="C#v3.5" на language="C#". Я не могу внести это изменение в официальную версию, так как это приведет к поломке при работе на 3.5 (и я не хочу поддерживать две отдельные версии только для этого).

person David Ebbo    schedule 02.02.2011

Предупреждение компилятора, которое вы получаете, это всего лишь предупреждение. Это не мешает работе T4MVC.

Что касается поддержки Razor, вы нашли соответствующий код в шаблоне — просто измените его.

var parts = GetControllers()
        .Select(m => m.ViewsFolder)
        .SelectMany(m => m.Views)
        .Where(m => m.Value.EndsWith(".ascx") || m.Value.EndsWith(".cshtml") || m.Value.EndsWith(".vbhtml"));

Я бы попробовал.

Это просто шаблон T4, а не магия. Все, что он содержит, — это простой код C#, который получает информацию о проекте из среды Visual Studio и генерирует довольно простой код C#.

person quentin-starin    schedule 01.02.2011
comment
Спасибо. Я знаю, что шаблоны T4 — это не волшебство. Я определенно мог бы внести изменения сам. Я просто не хотел тратить свое время на изменение, которое просто перезапишется при следующем обновлении T4MVC. Я хотел обратить на это внимание Дэвида, чтобы он мог выпустить исправление, которое принесет пользу всем. С тех пор я нашел еще одну ошибку в T4MVC и знаю, что нужно сделать, чтобы ее исправить, но я хочу стать участником проекта, поэтому я только что подал заявку на участие. Я надеюсь, что меня примут. - person Shayne; 04.02.2011