私はモデル式を取り、のように、その値を持つ何かをするヘルパーメソッド構築しています:C#の式で孫の価値を得るには?
Html.EditorFor(expression)
を(私はとして使用することができます:私は、このような方法を実装しましたHtml.EditorFor(m => m.Name)
以下のように:
public static MvcHtmlString MyMethod<TModel, TProperty>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> expression)
{
TModel dataModel = html.ViewData.Model;
MemberExpression mexp = expression.Body as MemberExpression;
PropertyInfo pinfo = mexp.Member as PropertyInfo;
string currentValue = dataModel != null ? pinfo.GetValue(dataModel) as string : null; //exception on this line
[do something with the value...]
}
これはグラムにしよう、などmodel.Name
などのモデルの直接の子の値を取得するための、より高い程度の参照のために働きますら例えばmodel.SomeChild.Name
などの値が例外をスローしていくつかの調査の後
Object does not match target type.
、それがメンバーの発現がプロパティ情報がName
に情報を保持SomeChild
を参照していることがわかります。値を取得しようとすると、その意味でmodel.Name
を取得しようとし、クラッシュします。
C#で式を使用して孫の価値を得るにはどうすればよいですか?
実際の値を取得しようとしているだけの場合は、 'Funcではなく式をとっている理由がありますか?もちろん、表現をデリゲートにコンパイルすることはできますが、そのことについてはパフォーマンスの影響はあまりありません。 –
@JonSkeetまた、私はHTMLを生成するためにメンバ/プロパティ名を含む完全な式を保持して、ポストバック時にその値を私のモデルに戻してバインドする必要があります。 ASP.NET MVCコンポーネントとして使用され、 'Html.XFor(m => m.Property)'の規約を維持したいと思います。 –
そして、残りの部分は 'Html.XFor(m => m.Foo.Bar)'を実際に持っていますか? –