2012-02-13 19 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類,並且你可以在其中放入非常複雜的視圖生成邏輯