2010-05-29 50 views
6

我有我自己的HTML辅助扩展,至极我用这种方式为什么模型=> model.Reason_ID变成模型=>转换(model.Reason_ID)

<%=Html.LocalizableLabelFor(model => model.Reason_ID, Register.PurchaseReason) %> 

其声明如下。

public static MvcHtmlString LocalizableLabelFor<T>(this HtmlHelper<T> helper, Expression<Func<T, object>> expr, string captionValue) where T : class { 
      return helper.LocalizableLabelFor(ExpressionHelper.GetExpressionText(expr), captionValue); 
     } 

但是当我在调试器中打开它时expr.Body.ToString()会显示Convert(model.Reason_ID)。但应该model.Reason_ID。 这是一个很大的问题,因为ExpressionHelper.GetExpressionText(expr)返回空字符串。 奇怪的是什么?我怎样才能摆脱它?

回答

7

问题在于你的Func泛型类型。将Func<T,object>替换为Func<T,S>,您就可以轻松前往:

public static MvcHtmlString LocalizableLabelFor<T,S>(this HtmlHelper<T> helper, Expression<Func<T, S>> expr, string captionValue) where T : class 
{ 
    // ... code ... 
} 
+1

非常感谢! – 2010-05-29 14:16:35

+0

它的工作原理!但我想知道为什么? – 2013-01-22 22:59:57

相关问题