2010-05-29 66 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