我一直在使用T4MVC已经有一段时间了,并喜欢“显式HtmlHelpers渲染局部”功能,默认情况下会关闭。我使用的是T4MVC版本2.6.40。
我最近升级到MVC3并注意到没有为Razor部分生成明确的HtmlHelpers,所以我查看了T4MVC文本模板的源代码,找到了一个名为“GetPartials”的方法,其中包含一行代码如下: / p>
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”编译。“
这涉及第18行,其中模板语言属性的值为“C#v3.5”。为什么必须有明确的版本依赖?它不只是“C#”吗?
在一篇文章中提出两个单独的问题的道歉。
答案 0 :(得分:11)
我刚刚发布了T4MVC 2.6.42来解决这个问题。你可以从Codeplex或NuGet获得它。
请注意,为了让剃刀文件被T4MVC检测为部分,其名称需要以下划线开头(例如_foo.cshtml)。如果没有这个限制,我们最终会为所有视图创建辅助方法,这会污染事物而不会增加价值。请注意,MVC团队通常建议使用_前缀部分Razor视图。
至于警告,它是无关的,是良性的。要摆脱它,只需将language =“C#v3.5”更改为language =“C#”。我无法在官方版本中进行更改,因为在3.5上运行会使其中断(并且我不想仅为此维护两个单独的版本)。
答案 1 :(得分: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#代码。