T4MVC не поддерживает DisplayTemplates и EditorTemplates
-
28-10-2019 - |
Вопрос
Я заметил это, когда я использовал следующее, по моему мнению:
<% 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";
}
Вы можете видеть, что с видом, содержащимся в общем корне, все в порядке, но, очевидно, он плохо справляется с подпаски.
Я знаю, что смогу изменить файл шаблона T4MVC, но действительно хотел бы ответ от Дэвид Эббо о том, собирается ли он изменить/исправить это.
Надеюсь, он следует за этим, по крайней мере, я видел его здесь в декабре.
Решение
Интересно, что это другое поведение было преднамеренно после того, как другой пользователь столкнулся с проблемами. Ищите это в 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[] { };
Надеюсь это поможет! :)