MVC Add View T4 Получить имя каталога - PullRequest
1 голос
/ 13 февраля 2012

При добавлении представления в MVC с помощью диалогового окна «Добавить вид» можно получить имя папки, в которую он добавляется, из шаблона представления T4 (например, папка «MyController», папка «Shared» и т. Д.).)?

Я пытаюсь выяснить имя контроллера при добавлении представления и подумал, что могу определить его, используя имя папки.У нас есть соглашение об именах для общих представлений, которое позволяет легко определить имя контроллера, но представления в папке контроллера используют стандартное соглашение об именах (например, «Индекс», «Детали»).

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Насколько я могу судить, нет способа получить путь к генерируемому файлу. В MvcTextTemplateHost , который это обеспечивает, нет свойства.

Однако похоже, что свойство Namespace даст вам родительскую папку. Поэтому, если в вашем проекте есть корневое пространство имен Test, и вы добавляете новое представление в папку Views \ Home, свойство Namespace возвращает «Test.Views.Home».

MvcTextTemplateHost mvcHost = (MvcTextTemplateHost)(Host);
string namespace = mvcHost.Namespace;
0 голосов
/ 10 июля 2012

Как я решил это, я написал класс T4 DesignHelper в Visual Studio. Мне пришлось добавить некоторые ссылки в веб-проекте Visaul Studio ASP.NET MVC в

Microsoft.VisualStudio.TextTemplating.10.0
Microsoft.VisualStudio.TextTemplating.Interfaces.10.0
Microsoft.VisualStudio.Web.Mvc.4.0
System.ComponentModel.DataAnnotations 

, возможно, некоторые другие классы, которые вы можете нарушитьв рефлекторе .NET используется хост mvc.Поэтому то, что вам может понадобиться.Затем в первой строке шаблона T4 я создаю экземпляр класса T4 DesignHelper и передаю в него хост mvc.Остальные методы в шаблоне T4 воспроизводятся в классе T4Designer (так что я могу видеть, что происходит, плюс любые другие методы, которые я хотел или вы могли бы добавить. Вы можете создать экземпляр того, что вы хотите, чтобы вызовы FileInfo db использовали дополнительное отражение для получения информациииз Типов моделей и т. д. Это имеет несколько преимуществ 1. Вы можете вызвать его из контроллера, когда представление загружается и видит, что происходит, все ваши методы выполняются и что происходит. Кроме того, это уменьшает шаблон T4 до методавызывает созданный экземпляр класса T4 DesignHelper, и вы можете поместить в него действительно сложную логику генерации представлений.

...