¿Cómo puedo hacer que una vista represente un parcial (control de usuario) desde una carpeta diferente? Con la vista previa 3 solía llamar a RenderUserControl con la ruta completa, pero con la actualización a la vista previa 5 esto ya no es posible. En cambio, obtuvimos el método RenderPartial, pero no me ofrece la funcionalidad que estoy buscando.
c#
asp.net-mvc
renderpartial
Boris Callens
fuente
fuente
FindPartialView
método con algo comoif(partialViewName.Contains"/")partialViewName="~/Views/"+partialViewName;
En mi caso, estaba usando MvcMailer (https://github.com/smsohan/MvcMailer) y quería acceder a una vista parcial desde otra carpeta, que no estaba en "Shared". Las soluciones anteriores no funcionaron, pero el uso de una ruta relativa sí.
fuente
Si usa esta otra ruta la mayor parte del tiempo, puede arreglarla permanentemente sin tener que especificar la ruta todo el tiempo. De forma predeterminada, está buscando vistas parciales en la carpeta Ver y en la carpeta Compartida. Pero di que quieres agregar uno.
Agregue una clase a su carpeta Modelos:
Luego, en su archivo Global.asax.cs, agregue la siguiente línea:
fuente
Para un control de usuario llamado myPartial.ascx ubicado en la carpeta Vistas / Cuenta, escriba así:
fuente
He creado una solución alternativa que parece estar funcionando bastante bien. Encontré la necesidad de cambiar al contexto de un controlador diferente para la búsqueda de nombre de acción, búsqueda de vista, etc. Para implementar esto, creé un nuevo método de extensión para
HtmlHelper
:ControllerContextRegion
Se define como:La forma en que se usa dentro de una vista es la siguiente:
Puede haber efectos secundarios no deseados para esto si su código requiere que el
controller
componente de ruta no cambie, pero en nuestro código hasta ahora, no parece haber ningún aspecto negativo en este enfoque.fuente
Se supone que VirtualPathProviderViewEngine, en el que se basa WebFormsViewEngine, admite los caracteres "~" y "/" en la parte frontal de la ruta, por lo que sus ejemplos anteriores deberían funcionar.
Noté que sus ejemplos usan la ruta "~ / Account / myPartial.ascx", pero usted mencionó que su control de usuario está en la carpeta Vistas / Cuenta. Has probado
o es solo un error tipográfico en tu pregunta?
fuente
Para los lectores que usan ASP.NET Core 2.1 o posterior y desean usar la sintaxis de Partial Tag Helper , intente esto:
La tilde (~) es opcional.
La información en https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1#partial-tag-helper también es útil.
fuente
deberías probar esto
coloque el
~/Views/
antes de su códigofuente
Cree un motor de vista personalizado y tenga un método que devuelva un ViewEngineResult. En este ejemplo, simplemente sobrescribe
_options.ViewLocationFormats
y agrega el directorio de su carpeta:Ejemplo: https://github.com/AspNetMonsters/pugzor
fuente
Intenta usar
RenderAction("myPartial","Account");
fuente