我遇到类似于此处描述的问题: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模板中获取控制器的名称?
答案 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系统本身不参与此过程。