2011-01-29 20 views
2

我正在創建一個強類型的幫助程序(ref:SO question)。正如下面的代碼中的'已評論',是否有可能以某種方式從表達的屬性中獲取值,從而繞過可選的selectedValue參數?.NET MVC強類型助手 - 從屬性獲取值?

<Extension()> _ 
    Public Function DatePickerFor(Of TModel As Class, TProperty)(ByVal htmlHelper As HtmlHelper(Of TModel), ByVal expression As Expression(Of Func(Of TModel, TProperty)), Optional ByVal selectedValue As Nullable(Of Date) = Nothing) As MvcHtmlString 
     Dim inputName = ExpressionHelper.GetExpressionText(expression) 
     Dim inputValue = selectedValue 
     //Something like this possible? 
     //inputValue = ExpressionHelper.GetExpressionValue(expression) 
     Return DatePicker(htmlHelper, inputName, inputValue) 
    End Function 

回答

9

如果你想獲得的表達是指向你可以使用FromLambdaExpression方法的相應屬性的值:

Dim metadata = ModelMetadata.FromLambdaExpression(expression) 
Dim value = metadata.Model 
+0

正是我需要的,謝謝。 – Ropstah

+3

在MVC3 ModelMetaData現在似乎需要一個ViewData參數,因此請嘗試:ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData); –

+0

我用這個:expression.Compile()。Invoke(html.ViewData.Model);獲得價值並且工作正常 –