2010-06-24 69 views
9

我遇到類似於此處所述問題的問題:MVC T4 MvcTextTemplateHost and Customized "Controller" T4 Template但希望更簡單。在View T4模板中獲取控制器名稱

我有一個ASP.NET MVC項目的自定義視圖模板(View.tt,Create.tt)。我無法弄清楚如何在這些視圖模板中獲取控制器名稱。 mvcHost.ControllerName和mvcHost.ControllerRootName在View模板中均爲null。但是,管道控制器名稱中的某處已知爲,因爲該視圖是在ControllerName文件夾中創建的。我想在模板本身中引用它。

具體來說,我要生成的HTML.ActionLink("Edit", MVC.<controllername>.Edit(id))代替HTML.ActionLink("Edit", "Edit", new {id = item.id})

是否有可能獲得在查看模板控制器的名字嗎?

+0

編輯:刪除與問題無關的t4mvc標記 – Felix 2010-06-30 03:48:59

+0

你最終是怎麼做的?我也想生成使用T4MVC的視圖,所以我需要控制器名稱。 – 2011-07-08 08:54:02

+0

只需放置一個佔位符/ *把控制器放在這裏* /。畢竟,我是爲自己做的(雖然幾個團隊成員「從我那裏借了」) - 所以沒有人抱怨! – Felix 2011-07-08 18:41:54

回答

2

我不認爲有一種方法可以在MVC 1.0或MVC 2中獲得該信息。主機的ControllerRootName和ControllerName屬性用於控制器T4模板,而不適用於視圖T4模板。

我會看看我們是否可以向T4主機添加更多信息以在生成視圖時啓用這些屬性。

生成的文件顯示在正確的文件夾中的原因是MVC項目系統將T4模板的輸出放在那裏。 T4系統本身不參與這個過程。

+1

是的,我們希望您啓用這些屬性! – 2011-07-08 21:54:04

+1

Eilon,任何想法,如果這已添加爲MVC 5(2014年10月)?我想在'Html.BeginForm'上添加一個自定義類,但據我所知我需要知道控制器名稱才能指定htmlAttributes。 – Sam 2014-10-28 15:53:49

4

因爲我按照約定幾乎總是使用相同的名稱爲我的控制器,因爲我有一個名爲型號,我用這個代碼在我的模板來獲取型號名稱和爲此控制器名稱:

@Html.ActionLink("Create new", 
    MVC.<#= mvcHost.ViewDataTypeName.Split('.').Last() #>.Create()) 
+0

感謝您的想法。我猜,*如果*我的控制器和模型之間有一對一的關係,這將是一個好主意。鑑於我從來沒有見過這樣的設計,但在最微不足道的教程中 - 我將不得不等待更基本的解決方案...... – Felix 2011-09-05 20:06:46