在View T4模板中获取控制器名称

时间:2010-06-24 04:21:05

标签: asp.net-mvc visual-studio-2010 t4

我遇到类似于此处描述的问题:MVC T4 MvcTextTemplateHost and Customized "Controller" T4 Template但希望更简单。

我有一个用于ASP.NET MVC项目的自定义视图模板(View.tt,Create.tt)。我无法弄清楚如何在这些视图模板中获取控制器名称。 mvcHost.ControllerName和mvcHost.ControllerRootName在视图模板中都为空。但是,管道控制器名称​​中的某处已知,因为视图是在ControllerName文件夹中创建的。我想在模板本身中引用它。

具体来说,我想生成HTML.ActionLink("Edit", MVC.<controllername>.Edit(id))而不是HTML.ActionLink("Edit", "Edit", new {id = item.id})

是否可以在View模板中获取控制器的名称?

2 个答案:

答案 0 :(得分:5)

由于按照惯例,我几乎总是使用与我命名模型相同的控制器名称,因此我在模板中使用此代码来获取模型名称及其控制器名称:

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

答案 1 :(得分:3)

我认为没有办法在MVC 1.0或MVC 2中获取该信息。主机的ControllerRootName和ControllerName属性用于控制器T4模板,而不用于视图T4模板。

我会看看是否可以在生成视图时向T4主机添加更多信息以启用这些属性。

生成的文件显示在右侧文件夹中的原因是MVC项目系统获取T4模板的输出并将其放在那里。 T4系统本身不参与此过程。