【问题标题】:Using lambda to specify property to Helper class from Razor Partial View使用 lambda 从 Razor 局部视图中指定 Helper 类的属性
【发布时间】:2011-08-24 15:48:23
【问题描述】:

我正在尝试编写一个 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 语法,因此我不确定如何实现此功能。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 lambda razor


    【解决方案1】:

    问题不在于 lambda,而在于您正在使用的动态 @ViewBag,这会导致动态调度该语句,如错误消息中所述。

    Major Byte 提供的其他两个选项:

    1. 转换动态,让编译器知道动态将解析为什么

      @ValidationFieldHelper.GetCSSClass(m => Model, (object)@ViewBag.Step)
      
    2. 使用前将动态设置为变量(基本上和上面的处理一样)

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

    这两个都为我抛出了正确的异常。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-05
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 2012-08-05
        相关资源
        最近更新 更多