Пользовательский ASP.NET MVC2 HtmlHelper: как получить экземпляр объекта, переданного ему? - PullRequest
1 голос
/ 18 января 2011

Я работаю на веб-сайте ASP.NET MVC2. Для учебы. Я работаю с языком Visual Basic.

В представлении я хотел бы сделать это:

 <%: Html.EditorForEnumeracion(Function(v) v.combustible%>

Итак, я создал метод расширения HtmlHelper:

Imports System.Runtime.CompilerServices
Imports System.Linq.Expressions
Imports System.Reflection

Public Module HtmlHelpers
    <Extension()> _
    Public Function EditorForEnumeracion(Of TModel, TValue)(ByVal html As HtmlHelper(Of TModel), ByVal expression As Expression(Of Func(Of TModel, TValue))) As MvcHtmlString
        'My stuff goes here
     End Function
End Module

Проблема в том, что я не знаю, как получить экземпляр объекта v.combustible, который я передаю помощнику. Мне плевать на v объект. Мне нужно работать с атрибутом горючего объекта v.

Здесь и здесь , кажется, как это сделать, но я не понимаю. Также я работаю с Visual Basic, а не с C #.

Я думаю, что могу получить экземпляр объекта Enumeracion через параметр expression, но я не понимаю, как.

Больше информации сейчас.

Это мой класс "ГИБУЛО":

Namespace Models.Automovil
    Public Class Vehiculo
        Public Property tipo As New Models.Enumeracion("TipoDeVehiculo")
        Public Property marca As String
        Public Property modelo As String
        Public Property numeroDePuertas As Integer
        Public Property combustible As New Models.Enumeracion("TipoDeCombustible")
        Public Property potencia As Integer
        Public Property fechaPrimeraMatriculacion As DateTime
        Public Property version As String
        Public Property precio As Decimal
        Public Property descripcion As String
    End Class
End Namespace

А это мой класс "Enumeracion":

Namespace Models
    Public Class Enumeracion
        Private bd As New tarificadorasegasaEntities
        Private diccionario As New Dictionary(Of String, Integer)
        Private _nombre As String
        Private _clave As String
        Private _valor As Integer
        Public ReadOnly Property nombre As String
            Get
                Return _nombre
            End Get
        End Property
        Public ReadOnly Property clave As String
            Get
                Return _clave
            End Get
        End Property
        Public ReadOnly Property valor As Integer
            Get
                Return _valor
            End Get
        End Property

        'More stuff here. Methods.

    End Class
End Namespace

Модель относится к классу ГИБЛУ.

Все еще не решаем это.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 18 января 2011

Вам нужно скомпилировать выражение в Func(Of TModel, TValue), а затем вызвать его для модели:

Dim func = expression.Compile()
Dim value = func(html.ViewData.Model)
0 голосов
/ 19 января 2011

Попробуй так:

<Extension()> _
Public Function EditorForMyCustomClassB(Of Vehiculo, Enumeracion)(ByVal html As HtmlHelper(Of TModel), ByVal expression As Expression(Of Func(Of Vehiculo, Enumeracion))) As MvcHtmlString
    Dim res = ModelMetadata.FromLambdaExpression(expression, html.ViewData)
    Dim e As Enumeracion = DirectCast(res.Model, Enumeracion)
    ' use e here
 End Function
...