T4MVC не поддерживает DisplayTemplates и EditorTemplates - PullRequest
2 голосов
/ 02 февраля 2011

Я заметил это, когда использовал следующее в моем представлении:

<% Html.RenderPartial(MVC.Shared.Views.EditorTemplates.ClientOnDocuments); %>

Строка выше возвращает только имя представления, поэтому в этом случае ClientOnDocuments. Затем включается механизм представления по умолчанию и пытается найти ClientOnDocuments.ascx в папке текущего представления и в общей папке, но не в папках DisplayTemplates и EditorTemplates.

Поскольку я довольно далеко продвинулся в использовании T4MVC, я не хочу выводить его или смешивать разные стили ссылочных представлений (например, вышеприведенное работает, если мы указываем путь к шаблону).

Причина в этом коде, который генерирует T4MVC:

    public class ViewNames {
    ...
        public readonly string FirmHeader = "~/Views/Shared/FirmHeader.ascx";
        public readonly string PostsSelector = "~/Views/Shared/PostsSelector.ascx";
        static readonly _DisplayTemplates s_DisplayTemplates = new _DisplayTemplates();
        public _DisplayTemplates DisplayTemplates { get { return s_DisplayTemplates; } }
        public partial class _DisplayTemplates{
            public readonly string ClientOnDocuments = "ClientOnDocuments";
            public readonly string DateTime = "DateTime";
        }
        static readonly _EditorTemplates s_EditorTemplates = new _EditorTemplates();
        public _EditorTemplates EditorTemplates { get { return s_EditorTemplates; } }
        public partial class _EditorTemplates{
            public readonly string ClientOnDocuments = "ClientOnDocuments";
            public readonly string DateTime = "DateTime";
            public readonly string PostCode = "PostCode";
        }

Вы можете видеть, что с представлением, содержащимся в Shared root, все в порядке, но, очевидно, он плохо обрабатывает подпапки.

Я знаю, что мог бы изменить файл шаблона T4MVC, но на самом деле хотел бы получить от David Ebbo ответ о том, собирается ли он изменить / исправить это.

Надеюсь, он следует ТАК, по крайней мере, я видел его здесь в декабре.

1 Ответ

4 голосов
/ 03 февраля 2011

Интересно, что это другое поведение было сделано намеренно после того, как другой пользователь столкнулся с проблемами. Ищите это в T4MVC.settings.t4:

// Views in DisplayTemplates and EditorTemplates folders shouldn't be fully qualifed as it breaks
// the templated helper code
readonly string[]  NonQualifiedViewFolders = new string[] {
  "DisplayTemplates",
  "EditorTemplates"
};

Так что, как правило, подпапки получают полный путь, но только эти две не могут.

Я думаю, что разница в том, что этот пользователь вызывал DisplayFor / EditorFor для их рендеринга, в то время как вы вызываете RenderPartial.

В любом случае, поскольку это находится в файле настроек, а не в основном шаблоне, вы можете просто изменить список, если вам не нужно такое поведение, т.е.

readonly string[]  NonQualifiedViewFolders = new string[] { };

Надеюсь, это поможет! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...