2011-08-24 27 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 ...