2012-02-13 60 views
1

使用“添加视图”对话框在MVC中添加视图时,可以从T4视图模板中获取要添加到的文件夹的名称(例如“MyController”文件夹, “共享”文件夹等)?MVC添加视图T4获取目录名称

我试图找出添加视图时的控制器名称,并认为我可以使用文件夹名称来确定它。我们对共享视图有一个命名约定,可以很容易地确定控制器名称,但控制器文件夹中的视图使用标准命名约定(例如“索引”,“详细信息”)。

谢谢!

回答

1

据我所知,没有办法获得正在生成的文件的路径。 MvcTextTemplateHost没有提供此属性。

但它看起来像名称空间属性会给你父文件夹。因此,如果您的项目具有Test的根名称空间,并且您正在向Views \ Home文件夹添加新视图,那么Namespace属性将返回“Test.Views.Home”。

MvcTextTemplateHost mvcHost = (MvcTextTemplateHost)(Host); 
string namespace = mvcHost.Namespace; 
+0

这正是我所期待的,非常感谢! – Rob 2012-04-23 13:49:53

0

如何解决,这是我写在Visual Studio中一个T4 DesignHelper类,我不得不在VISAUL Studio的ASP.NET MVC Web项目的一些引用添加到

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数据库调用使用额外反射来导出信息的任何内容从模型类型等等。 这有几个优点1.您可以在视图加载时从控制器中调用它并查看正在发生的事情,所有方法都可以执行以及发生了什么,还可以将T4模板方法调用实例化的T4 DesignHelper类,并且你可以在其中放入非常复杂的视图生成逻辑