私はExpression
を持っています。これは私のビューのために私のModel
からアイテムのリストを取得するために使用されます。 私は何をしたいのですか、List
のExpression
が与えられていますが、Expression Tree
の親ノードを取得するために上に戻ることができますか?式から親メンバーを取得
Expression
を取る
HtmlHelper
を持っている...
public class MyModel {
public MyClass myClass { get; set;}
}
public class MyClass {
public List<string> MyList { get; set;}
}
を:
のは、これが私の見解モデルであるとしましょう
public static MvcHtmlString RenderList(this HtmlHelper<TModel> html, Expression<Func<TModel, IEnumerable<TItem>>> dataExpression)
{
var list = dataExpression.Compile()(html.ViewData.Model);
...
return MvcHtmlString.Create(...);
}
私のヘルパーは、次のように呼びます:
@model MyNamespace.Models.MyModel
@Html.RenderList(m => m.myClass.MyList)
このすべては、私はそれが親ノード(MyClass
)、それは価値だ得るために、私Model
に対してそれをコンパイルしますList<string>
を指す与えExpression
を取ると、取得することができ、私の質問があり、正常に動作します。したがって、このExpression
の同等:ここ
m => m.myClass
は、私が試したものです:
// This gets the correct expression
var exp = ((MemberExpression)this._dataExpression.Body).Expression;
// Create a parameter representing the type of the Model ?
var parameter = Expression.Parameter(typeof(TModel));
// Create lambda
var lambda = Expression.Lambda<Func<TModel, dynamic>>(exp, parameter);
// Try and compile against the view model
var obj = lambda.Compile()(html.ViewData.Model);
は完全に働いたこと、ありがとうございました。 – Gabe