2011-08-24 61 views
0

我想写一个EditorTemplate到一般应用依赖于一个辅助提供使从ViewBag模型和附加数据的逻辑CSS类:使用lambda从剃刀局部视图指定属性的Helper类

@using LSC.DCMP.Web.UI.Helpers 
@model String 

@ValidationFieldHelper.GetCSSClass(m => Model, @ViewBag.Step) 

此相匹配,目前未实现一个辅助类,但具有以下特征:

public static class ValidationFieldHelper 
{ 
    public static object GetCSSClass(Func<object, string> func, object step) 
    { 
     throw new NotImplementedException(); 
    } 
} 

当我尝试运行应用程序,它无法编译,出现以下错误:

"Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type".

我读过lambda语法不完全支持使用Razor模板,所以我不确定如何实现此功能。

回答

4

问题不在于与lambda有关,而是与您使用的动态@ViewBag有关,这会导致该语句如错误消息中所述,被动态分派。

其他两个选项,以什么专业字节提供了:

  1. 投它可以让编译器的动态了解动态将解决什么

    @ValidationFieldHelper.GetCSSClass(m => Model, (object)@ViewBag.Step) 
    
  2. 设置动态的变量(与上述基本相同)

    @{ object vstep = ViewBag.Step; } 
    @ValidationFieldHelper.GetCSSClass(m => Model, vstep) 
    

这两个都为我抛出正确的例外。

0

@ValidationFieldHelper.GetCSSClass((Func<object, string>) (m => Model), @ViewBag.Step) 

为你工作? 这不是最干净的解决方案,但我可以得到它抛出NotImplementedException ...