Tengo las últimas versiones de VS 2010, .NET 4.0 y MVC 3 y tengo un problema al usar áreas en asp.net mvc 3 cuando uso vb. red.No se puede cargar la vista en el área en asp.net mvc 3 usando vb.net
hago lo siguiente:
- Crear un nuevo proyecto visual asp.net mvc básica 3. Seleccione Razor como "Ver Engin" y llame al proyecto "TestApp".
- Crea una nueva área llamada "Prueba", estará en la carpeta:/Áreas/Prueba.
- Añadir un nuevo controlador de vacío llamado "PageController.vb" en/Áreas/test/Controladores /".
- Añadir una nueva carpeta en/áreas/Prueba/Vistas/llamada "página".
- Añadir un nuevo Ver vacío llamado "Index.vbhtml" en/áreas/Prueba/Vistas/Página
- Ejecutar el proyecto
- escriba manualmente la URL "http: // localhost: xyz/Prueba/Página".. en el navegador, donde xyz es el número de puerto agregado automáticamente generado por VS.
En el paso 7 aparece el mensaje "El recurso ca no se encuentra ".
Si hago exactamente lo mismo usando C#, entonces llegaré a la página correcta y se mostrará la palabra "Index" como se esperaba.
¿Esto es un error o me falta algo? He estado escaneando la web durante horas tratando de resolver esto, pero me estoy volviendo obvio.
Este es el archivo creado de forma automática TestAreaRegistration.vb Espacio de nombres TestApp.Areas.Test Clase pública TestAreaRegistration Hereda AreaRegistration
Public Overrides ReadOnly Property AreaName() As String
Get
Return "Test"
End Get
End Property
Public Overrides Sub RegisterArea(ByVal context As System.Web.Mvc.AreaRegistrationContext)
context.MapRoute(_
"Test_default", _
"Test/{controller}/{action}/{id}", _
New With {.action = "Index", .id = UrlParameter.Optional} _
)
End Sub
End Class
Fin Espacio de nombres
y este es el archivo creado de forma automática Global.ascx : 'Nota: para obtener instrucciones sobre cómo habilitar el modo clásico IIS6 o IIS7, ' visite http://go.microsoft.com/?LinkId=9394802
Public Class MvcApplication Hereda System.Web.HttpApplication
Shared Sub RegisterGlobalFilters(ByVal filters As GlobalFilterCollection)
filters.Add(New HandleErrorAttribute())
End Sub
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute(_
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
)
End Sub
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
Estos son idénticos a lo que se obtiene si se repete los pasos 1-7 y utilizar C# (única diferencia es que se quiere obtener el código C# que es igual al código anterior de vb.net).
Repito: si hago los pasos del 1 al 7 en C#, funciona, pero no funcionará en vb.net. ¿Qué está mal?
Utilicé el método de acción predeterminado que se obtiene al crear un controlador vacío, por lo que no fue eso. ¡Gracias por ponerme en el camino correcto! Puse los dos proyectos de muestra uno al lado del otro para ver si había alguna diferencia entre el proyecto C# y vb.net y ahora vi que había algunas diferencias de "Espacio de nombres" en, por ejemplo, el "PageController.vb" en comparación con "PageController .cs ". Parece que la versión vb.net de mvc 3 olvidó agregar las definiciones correctas del espacio de nombre y cuando lo corrigí todo comenzó a funcionar. – Thomas
yay !! horas de desconcierto, y todo lo que tenía que hacer era arreglar los espacios de nombres en cada controlador autogenerado. ¡¡Gracias!! – user158017
Esta respuesta me puso en el camino correcto, pero, me parece que la sintaxis del 4to parámetro está un poco desajustada ... debería ser más como esto: namespaces: = {"MyDefaultNamespace.Areas.Test.Controllers"} o al menos esto es lo que funcionó para mí Aunque mis controladores de área no estaban en este espacio de nombres, los examiné específicamente como tales y agregué este parámetro y todo funcionó en mi aplicación web VB.NET MVC 4. – bkwdesign