type net mvc multiple form buttons asp asp.net asp.net-mvc asp.net-mvc-4

asp.net - net - input type submit html actionlink



Cómo compartir HTML entre proyectos ASP.NET MVC4 (4)

ASP.NET MVC buscará en la misma asamblea para la vista. Colocar la Vista o HTML en un ensamblaje diferente será incómodo para el marco. Internamente, no creo que el marco admita la ubicación de la Vista / HTML fuera del alcance del ensamblaje. Es posible que deba escribir algún código personalizado o ampliar el marco, su código abierto.

Tengo un par de sitios web que estoy construyendo que muestran datos iguales o similares en las páginas. Para reducir la duplicación de código, lo que hice fue crear un tercer proyecto / sitio web y pensé que lo usaría como la ubicación para HTML compartido, java-script, CSS, imágenes, etc.

Puedo incluir JavaScript, CSS e imágenes bien del proyecto compartido utilizando rutas relativas. Sin embargo, no puedo hacer páginas parciales de HTML. al intentar acceder a los dos sitios web que intentan cargar una página parcial utilizando un código como el siguiente:

@RenderPage("/SharedArtifacts/Views/MySharedViewscshtml")

Me sale la siguiente respuesta:

The virtual path ''/SharedArtifacts/Views/MySharedViewscshtml'' maps to another application, which is not allowed.

Ahora he buscado en Google y he intentado usar el prefijo ~ para especificar la raíz de la ruta para resolver el problema, pero en vano ... sigue siendo el mismo error.

¿Alguna idea sobre cómo resolver este problema?



Hacemos esto todo el tiempo. La forma simple (sin programación) es crear carpetas virtuales en IIS que se asignan a una carpeta compartida común a todos los sitios complementarios. Normalmente lo hacemos para las páginas de resultados de error y otro contenido genérico.

/Views/SharedVirtual/somefile.ascx

La ruta /Views/SharedVirtual se asigna a través de las carpetas virtuales de IIS. Luego, en los controladores podemos hacer una return View("/Views/SharedVirtual/somefile.ascx",somemodel); . También funciona con RenderPartial también.

Localmente, al trabajar con los proyectos, uso mklink para crear un punto de unión en la carpeta del proyecto que se asigna a la carpeta común compartida. De esa manera, VS piensa que la carpeta es local cuando no lo está y puede ejecutar el proyecto localmente para la depuración.

Normalmente no usamos Razor, pero el concepto debería funcionar de la misma manera ya que no es VS el que realiza la asignación de recursos compartidos, es el sistema operativo y el IIS.

Una advertencia es que si edita las vistas, éstas cambiarán en todos los proyectos, por lo que debe tener cuidado con sus ediciones para asegurarse de que sean compatibles cuando se usen en todos los proyectos que las mencionan.


Las vistas que desea representar residen fuera de la raíz de la aplicación web. Esto no está permitido al menos por razones de seguridad.

Sin embargo, lo que puede hacer es incrustar los veiws (.cshtml) como recursos al seleccionar la acción de compilación "Incrustar como recurso" en lugar de la predeterminada. Luego, al usar el administrador de paquetes NuGet, instale y use un proveedor de ruta virtual capaz de representar las vistas ya integradas como here , here o here .