【问题标题】:Get controller name in View T4 template在 View T4 模板中获取控制器名称
【发布时间】:2011-11-05 22:46:55
【问题描述】:

我遇到了与此处描述的问题类似的问题: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 模板中获取控制器的名称?

【问题讨论】:

  • 编辑:删除与问题无关的 t4mvc 标签
  • 你最后做得怎么样?我还想生成使用 T4MVC 的视图,所以我需要控制器名称。
  • 只要放一个占位符 /* 把控制器放在这里 */.毕竟,我是为自己做的(虽然有几个团队成员从我这里“借用”了它:)——所以没有人抱怨!

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的想法。我想,如果我的控制器和模型之间存在一对一的关系,这将是一个好主意。鉴于除了最简单的教程之外,我从未在任何地方看到过这样的设计 - 我将不得不等待更基本的解决方案......
【解决方案2】:

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

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

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

【讨论】:

  • 是的,我们希望您启用这些属性!
  • Eilon,知道是否从 MVC 5(2014 年 10 月)开始添加它吗?我想在Html.BeginForm 上添加一个自定义类,但据我所知,我需要知道控制器名称才能指定 htmlAttributes。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 2012-02-06
相关资源
最近更新 更多