[英]Get value from ASP.NET MVC Lambda Expression
我正在嘗試創建自己的HTML Helper,它接受一個表達式(類似於內置的LabelFor <>幫助器。我已經找到了在表達式類似於此時獲取屬性值的示例:
model => model.Forename
但是,在我的一些模型中,我想獲取子元素中的屬性,例如
model => mode.Person.Forename
在這些例子中,無論如何我都找不到(輕松)獲取Forename的值。 任何人都可以建議我應該如何獲得這個價值。
謝謝
如果您使用的是LabelFor <>方法使用的相同模式,那么表達式將始終是LambdaExpression,您只需執行它即可獲取值。
var result = ((LambdaExpression)expression).Compile().DynamicInvoke(model);
通常,您始終可以在LambdaExpressions中包裝泛型表達式,然后編譯並調用它們以獲取值。
如果你想要的不是Forename的值,而是字段本身(fx。打印出字符串“Forename”)那么你唯一的選擇是使用某種形式的表達式。 在C#4中,框架提供了一個名為ExpressionVisitor的類,可以用於此,但是對於框架的早期版本,您必須自己實現它 - 請參閱: http : //msdn.microsoft.com/en-us/library/ bb882521(VS.90)的.aspx
你在尋找價值?
為什么這不起作用?
public object GetValue<T>( Expression<Func<T>> accessor )
{
var func = accessor.Compile();
return func.Invoke();
}
我已經單獨回答了這個問題,因為有兩件事我不喜歡接受的答案。
我之前知道的示例是為lambda表達式設計的,它產生一個字節數組:
public static MvcHtmlString MyHelper<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, byte[]>> expression)
{
var compiledExpression = expression.Compile();
byte[] byteData = compiledExpression(htmlHelper.ViewData.Model);
...
...
...
return new MvcHtmlString(.......);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.