2009-05-18 13 views
5

Me encontré con un problema extraño durante el fin de semana mientras trabajaba en un proyecto asp.net mvc en vb.net. Creé un método de extensión para convertir un entero al mes correspondiente al que está asociado. Probé el método de extensión en una aplicación de consola, así que sé que está funcionando.Método de extensión VB.NET en la vista utilizando ASP.NET MVC

En mi proyecto asp.net mvc tengo una vista y quiero llamar al método de extensión, pero me sale un error que indica que no se reconoce el método de extensión. Importé el espacio de nombres en el que estaba contenido y todavía no pude deshacer el error. ¿Tienes idea de lo que está pasando? No tengo mi código conmigo, pero puedo publicarlo esta noche si eso ayuda. ¡Gracias!

Método de extensión:

Imports System.Runtime.CompilerServices 

Module SiteExtensions 
    <Extension()> _ 
    Public Function ConvertToMonth(ByVal monthNumber As Integer) As String 
     Dim month As String = String.Empty 
     Select Case monthNumber 
      Case 1 
       month = "January" 
      Case 2 
       month = "February" 
      Case 3 
       month = "March" 
      Case 4 
       month = "April" 
      Case 5 
       month = "May" 
      Case 6 
       month = "June" 
      Case 7 
       month = "July" 
      Case 8 
       month = "August" 
      Case 9 
       month = "September" 
      Case 10 
       month = "October" 
      Case 11 
       month = "November" 
      Case 12 
       month = "December" 
     End Select 
     Return month 
    End Function 
End Module 

Vista:

<% For Each m As Integer In DirectCast(ViewData("Months"), IEnumerable)%> 
<a href="#"><%=m.ConvertToMonth()%><br /></a> 
<%Next%> 

error es: "ConvertToMonth no es miembro de número entero"

Jon

Respuesta

11

Asegúrese de declarar su módulo como Público.

+0

Perdí mucho tiempo con este problema. De hecho, lo corregí por mi cuenta y luego leí esto. +1 –

2

El código probablemente ayudaría, pero todavía no parece que tenga el método de extensión importado correctamente. Puede intentar darle el mismo espacio de nombre que su aplicación. O cambie el espacio de nombre de la extensión a System.Web.Mvc, ya que sabemos que el espacio de nombres funciona, y luego retrocedemos desde allí.

+0

Gracias por su respuesta! No he podido probarlo todavía porque mi placa madre murió tan pronto como encendí mi máquina la noche anterior. Debería arreglarse hoy o mañana y le daré una oportunidad a su sugerencia, ¡gracias! – Jon

4

cambiar el código de la siguiente manera:

Public Module SiteExtensions 

End Module 
Cuestiones relacionadas