2011-02-01 55 views
8

我一直在使用T4MVC一段時間,並喜歡「顯式Ht​​mlHelpers渲染偏差」功能,默認情況下關閉。我正在使用T4MVC版本2.6.40。什麼時候T4MVC支持Razor和顯式HtmlHelpers來渲染partials?

我最近升級到MVC3,並注意到沒有明確的HtmlHelpers生成Razor partials,所以我查看了T4MVC文本模板的源代碼,並找到一個名爲「GetPartials」的方法,其中有一行代碼作爲folows:

var parts = GetControllers() 
     .Select(m => m.ViewsFolder) 
     .SelectMany(m => m.Views) 
     .Where(m => m.Value.EndsWith(".ascx")); 

所以很明顯,不支持Razor視圖。我還想提到在運行T4模板時(右鍵單擊>運行定製工具),我得到一個編譯器警告,指出:「C#2.0和C#3.5編譯器不再受支持,模板將始終是使用版本4編譯器編譯,而不是按指定的「v3.5」編譯。「

這與模板語言屬性的值爲「C#v3.5」的行18相關。爲什麼它必須有一個明確的版本依賴關係?它不只是「C#」嗎?

在一篇文章中提出兩個不同問題的道歉。

回答

11

我剛剛發佈了T4MVC 2.6.42來解決這個問題。你可以從Codeplex或NuGet中獲得它。

請注意,爲了通過T4MVC將剃鬚刀文件檢測爲部分文件,其名稱需要以下劃線(例如_foo.cshtml)開頭。沒有這個限制,我們最終會爲所有視圖創建輔助方法,這會污染事物並且不會增加價值。請注意,使用_前綴部分Razor視圖通常由MVC團隊推薦。

至於警告,它是不相關的,是良性的。爲了擺脫它,只需將language =「C#v3.5」更改爲language =「C#」。我不能在官方版本中進行這種更改,因爲這會在3.5上運行時破壞(而且我不想爲此維護兩個單獨的版本)。

+1

謝謝大衛! – Shayne 2011-02-02 09:13:00

2

您收到的編譯器警告就是這樣一個警告。這並不妨礙T4MVC的工作。

至於支持Razor,你在模板中找到了合適的代碼 - 只需修改它即可。

var parts = GetControllers() 
     .Select(m => m.ViewsFolder) 
     .SelectMany(m => m.Views) 
     .Where(m => m.Value.EndsWith(".ascx") || m.Value.EndsWith(".cshtml") || m.Value.EndsWith(".vbhtml")); 

我會試試看。

這只是一個T4模板,不是魔術。它包含的只是簡單的c#代碼,它從Visual Studio環境獲取項目信息並生成一些相當簡單的c#代碼。

+2

謝謝。我知道T4模板並不神奇。我絕對可以自己做出改變。我只是不想浪費時間進行改變,下次更新T4MVC時會被覆蓋。我想把它帶給大衛的注意,所以他可以發佈一個修復程序,讓每個人都能受益。實際上,在T4MVC中發現了另一個bug,我知道該怎麼做才能解決這個問題,但是我想成爲項目的貢獻者,所以我只是要求成爲貢獻者。我希望我能接受。 – Shayne 2011-02-03 23:29:31

相關問題