2010-08-09 11 views
5
<ul> 
    <li><% Html.ActionLink(StringHelper.TryGetLocalString("Something"), 
      "Blah", "Blah"); %></li> 
</ul> 

Tuve que hacer que la clase StringHelper anterior fuera pública antes de poder verla desde mi vista parcial.ASP MVC: ¿Por qué mis clases internas no son visibles desde mis Vistas?

¿Por qué?

(nota al margen: la resolución de la cadena local se realizará en mi controlador no en la vista (diseño) pero es un buen ejemplo rápido).

Gracias por su ayuda, Lucas

+0

Tan pronto como publique esta pregunta, comencé a preguntarme si mi suposición de que todo el código está compilado y colocado en el mismo ensamblaje es incorrecto. –

+0

Aye aye capitan. Las vistas son, por defecto, no compiladas con MVC 1 o 2 cuando se depura. Hay formas de hacer que compilen, si es realmente necesario. – Rangoric

Respuesta

3

Desde el StringHelper es muy probable que no compilado en la misma DLL como el resto del código del sitio web de MVC, que no tiene acceso a las cosas internas.

Este será el caso cuando tenga controladores, vistas, etc., ya que la configuración predeterminada del sitio web MVC (y cómo funciona al depurar) consiste en compilar el código normal en una DLL, luego compilar las páginas/vistas por separado . Esto también ocurre cuando tiene la configuración de "Actualizabilidad" cuando publica el sitio web.

+1

¿Cuál es la solución? Realmente no quiero que todas mis clases sean públicas –

+0

En el ejemplo de la pregunta, la respuesta fue mover la lógica al controlador o hacer un método de extensión público en la cadena "Hola" .TryToLocalise() que luego llama a el StringHelper. –

+0

@VincePanuccio solo el método que necesita la vista debe ser público. Como el ejemplo de Lucas. Todavía un poco fuera considerando que están en el mismo proyecto. También podría tratar de tener las vistas en una DLL a la que pueda hacer referencia a través de algo como: http://www.chrisvandesteeg.nl/2010/11/22/embedding-pre-compiled-razor-views-in-your-dll/ – Rangoric

2

Las vistas (o archivos aspx/ascx) en ASP.NET se compilan cuando el servidor web carga la aplicación. Esto probablemente significa que están en otra asamblea y tus clases son internas ... entiendes el punto.

Cuestiones relacionadas