什么时候T4MVC会支持带有显式HtmlHelper的Razor来渲染部分?

时间:2011-02-01 09:56:04

标签: c# asp.net-mvc asp.net-mvc-3 razor t4mvc

我一直在使用T4MVC已经有一段时间了,并喜欢“显式Ht​​mlHelpers渲染局部”功能,默认情况下会关闭。我使用的是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#”吗?

在一篇文章中提出两个单独的问题的道歉。

2 个答案:

答案 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#代码。