8

我已经使用 T4MVC 有一段时间了,并且喜欢“用于渲染局部的显式 HtmlHelpers”功能,默认情况下它是关闭的。我正在使用 T4MVC 版本 2.6.40。

我最近升级到 MVC3 并注意到没有为 Razor 部分生成显式 HtmlHelpers,所以我查看了 T4MVC 文本模板的源代码,发现了一个名为“GetPartials”的方法,它有一行代码如下:

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#”吗?

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

4

2 回答 2

11

我刚刚发布了 T4MVC 2.6.42 来解决这个问题。您可以从 Codeplex 或 NuGet 获取它。

请注意,为了让 T4MVC 将 razor 文件检测为部分文件,其名称需要以下划线开头(例如 _foo.cshtml)。如果没有这个限制,我们最终会为所有视图创建辅助方法,这会污染事物而不是增加价值。请注意,MVC 团队通常建议使用 _ 为部分 Razor 视图添加前缀。

至于警告,它是无关的,是良性的。要摆脱它,只需将语言 =“C#v3.5”更改为语言 =“C#”。我无法在正式版本中进行该更改,因为这会在 3.5 上运行时中断(而且我不想为此维护两个单独的版本)。

于 2011-02-02T02:42:38.350 回答
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# 代码。

于 2011-02-01T15:45:54.143 回答