2011-07-16 28 views
2

我试图通过编译和调用来获取表达式值,但是我得到了一些错误,直到现在还没有成功。如何获得这个表达式值model => model.Name?

public static void TextEditorFor<TModel, TProperty>(this System.Web.Mvc.HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression) 
{ 
    var value = expression.Compile().Invoke(html.ViewData.Model);//problem that is value is null 

} 
+1

什么样的代码是你想执行?有什么错误? –

+1

“但我得到一些错误” - 请具体。另外 - 你的模型实例(在执行时读取)从哪里来? –

+0

@Marc Gravell - 更新了我的问题 – Freshblood

回答

2

(适用于问题)

鉴于签名,你应该只需要:

return Convert.ToString(
    expression.Compile().Invoke(modelInstance) 
); 

您还可以通过表达的检查做到这一点,如果绝对需要。

+0

但是,将null转换为String的目的是什么? Invoke方法返回null,尽管Model不为null。 – Freshblood

+0

@FreshBlood你的原始方法签名返回'string'。如果你不想要一个字符串,不要把这个问题放在问题:)重新空 - 如果.Name为空(即,拉姆达自然返回null),那么你应该期望一个空值。你还会期待什么? –

+0

你是对的。模型属性为null。那就是为什么结果为空。谢谢 – Freshblood