2011-02-01 57 views
8

我一直在使用T4MVC一段时间,并喜欢“显式Ht​​mlHelpers渲染偏差”功能,默认情况下关闭。我正在使用T4MVC版本2.6.40。什么时候T4MVC支持Razor和显式HtmlHelpers来渲染partials?

我最近升级到MVC3,并注意到没有明确的HtmlHelpers生成Razor partials,所以我查看了T4MVC文本模板的源代码,并找到一个名为“GetPartials”的方法,其中有一行代码作为folows:

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”编译。“

这与模板语言属性的值为“C#v3.5”的行18相关。为什么它必须有一个明确的版本依赖关系?它不只是“C#”吗?

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

回答

11

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

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

至于警告,它是不相关的,是良性的。为了摆脱它,只需将language =“C#v3.5”更改为language =“C#”。我不能在官方版本中进行这种更改,因为这会在3.5上运行时破坏(而且我不想为此维护两个单独的版本)。

+1

谢谢大卫! – Shayne 2011-02-02 09:13:00

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

+2

谢谢。我知道T4模板并不神奇。我绝对可以自己做出改变。我只是不想浪费时间进行改变,下次更新T4MVC时会被覆盖。我想把它带给大卫的注意,所以他可以发布一个修复程序,让每个人都能受益。实际上,在T4MVC中发现了另一个bug,我知道该怎么做才能解决这个问题,但是我想成为项目的贡献者,所以我只是要求成为贡献者。我希望我能接受。 – Shayne 2011-02-03 23:29:31

相关问题