2013-12-16 7 views
6

で使用することができます私はこれに似たMVCモデルMVC4テンプレートが唯一のフィールドへのアクセス

public class Model 
{ 
    public string Name {get;set;} 
    public int Number {get;set;} 
} 

を持っている私は

テンプレートは、単一のフィールドアクセス、プロパティへのアクセス、一緒に使用することができ、エラーを受け取ります次元配列のインデックス、または単一パラメータのカスタムインデクサ式。

モデルのラムダ式を変数に格納して、番号フィールドのラベルを作成しようとしたとき。

@Html.LabelFor(model => model.Name) // Works fine 
@Html.LabelFor(model => model.Number) // Works fine 

@{ 
    Expression<Func<Offer, object>> nameExpression = model => model.Name; 
    Expression<Func<Offer, object>> numberExpression = model => model.Number; 
} 
@Html.LabelFor(nameExpression) // Works fine 
@Html.LabelFor(numberExpression) // Error! 

は、私が代わりにmodel => model.Numberの、ラムダ式がmodel => Convert(model.Number)あるデバッガを使用して気づいたが、これは唯一のように、私が言うことができるものから、値の型に起こる:

例えば、私の見解では私が持っています私は整数(nullableとnullableではない)とDateTimeオブジェクトでテストしました。 ラムダ式のNodeTypeはの文字列のため、Convertと思われます。

私はエラーそのものの原因を知っていますが、コンパイラが何を評価するのかはわかりませんmodel=>model.Numberからmodel => Convert(model.Number)までです。

ありがとうございます!

答えて

3

model.Numberintからobjectに変換するキャストがあります。あなたは右の式を取得したい場合は、デバッガでの式で

.Lambda #Lambda1<System.Func`2[Model,System.Object]>(Model $model) { 
    (System.Object)$model.Number 
} 

を見ることによって、あなたはこの式は

.Lambda #Lambda1<System.Func`2[Model,System.Int32]>(Model $model) { 
    $model.Number 
} 
+0

に翻訳されExpression<Func<Model, int>>

Expression<Func<Model, int>> numberExpression = model => model.Number; 

を使用していることを確認することができますありがとう!私はこれに気付かなかったとは信じられません、それは愚かな間違いですが、私は今働くことにしました。 – florinszilagyi

関連する問題