我正在尝试编写一个EditorTemplate来一般地应用CSS类,这些类依赖于在传递模型的助手中提供的逻辑以及来自ViewBag的其他数据:
@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();
}
}
当我尝试运行应用程序时,编译失败并出现以下错误:
“不能将lambda表达式用作动态调度操作的参数,而不先将其转换为委托或表达式树类型。”
我已经读过使用Razor模板不完全支持lambda语法,所以我不确定如何实现这个功能。
答案 0 :(得分:4)
问题与lambda无关,而是与您正在使用的动态@ViewBag有关,这会导致动态调度该语句,如错误消息中所述。
Major Byte提供的另外两个选项:
投射动态,让编译器知道动态将解析的内容
@ValidationFieldHelper.GetCSSClass(m => Model, (object)@ViewBag.Step)
在使用之前将动态设置为变量(基本上与上述相同)
@{ object vstep = ViewBag.Step; }
@ValidationFieldHelper.GetCSSClass(m => Model, vstep)
这两个都为我抛出了正确的例外。
答案 1 :(得分:0)
会
@ValidationFieldHelper.GetCSSClass((Func<object, string>) (m => Model), @ViewBag.Step)
为你工作? 这不是最干净的解决方案,但我可以让它抛出NotImplementedException ...