【发布时间】:2014-02-24 15:26:41
【问题描述】:
我希望能够找出 razor 使用哪个 C# 版本来编译我的 cshtml 模板。我想要这个的原因是this breaking change。
我们在 foreach 语句中有一个 lambda,它在我们的本地开发机器上运行良好,但在我们的测试环境(没有安装 C# 5)上产生了一个错误。这个错误非常难以调试(我们甚至复制了所有测试环境的 DLL 和数据库,但仍然无法重现该错误)。
因此,为了防止将来出现这种开发/测试差异,我想知道是否有办法指定 razor 用于编译 cshtml 文件的 C# 版本。如果我可以检查 razor 使用的 C# 版本(通过打印它),那就太好了。
更新:根据要求,提供有关此行为如何发生的更多详细信息。
我们使用 devexpress mvc 网格在我们的 razor 视图中显示数据。为了以动态方式添加列,我们循环(foreach)一个在数据网格中插入列的列表(使用 lambda)。一个简化的例子:
@Html.DevExpress().GridView(
settings =>
{
settings.Name = "gvDashboard";
//Some more settings
settings.Columns.Add(column =>
{
column.FieldName = Model.DashboardItems.PropertyName(p => p.Id);
column.Caption = "Id";
//Some more column settings
});
foreach (var extraColumnLoopVar in Model.ExtraColumns)
{
//We added this to solve the problem
var extraColumn = extraColumnLoopVar;
settings.Columns.Add(column =>
{
column.Caption = extraColumn.Name;
//Some more column settings
column.SetDataItemTemplateContent(content =>
{
Html.ViewContext.Writer.Write(extraColumn.MyValue);
});
});
}
});
【问题讨论】:
-
我我很好奇你所依赖的循环关闭的用途。正如文章所提到的,它很少被实际使用。所以我真的很想看到这样一个用例。
-
查看更新的答案
-
感谢您花时间更新您的问题。我以为您实际上使用了 闭包变量行为,但是您遇到了您不想 想要使用它的问题。看起来这会咬很多不知道即将成为传统设置中不同行为的人。由于您的问题,我确实了解了这一重大变化;)
-
你说得对,我把这个例子简化了。我确实使用了该值,并且在 C# 4 中,每列的值都相同。 PS。我很高兴你从中学到了:)。
标签: c# razor razorgenerator