Renderizar parcial desde una carpeta diferente (no compartida)

Renderizar parcial desde una carpeta diferente (no compartida)

Simplemente incluya la ruta a la vista, con la extensión del archivo.

Maquinilla de afeitar:

@Html.Partial("~/Views/AnotherFolder/Messages.cshtml", ViewData.Model.Successes)

Motor ASP.NET:

<% Html.RenderPartial("~/Views/AnotherFolder/Messages.ascx", ViewData.Model.Successes); %>

Si ese no es su problema, ¿podría incluir su código que solía funcionar con RenderUserControl?


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 "Compartido". Las soluciones anteriores no funcionaron, pero usar una ruta relativa sí.

@Html.Partial("../MyViewFolder/Partials/_PartialView", Model.MyObject)

Si usa esta otra ruta la mayor parte del tiempo, puede arreglar esto de forma permanente sin tener que especificar la ruta todo el tiempo. De manera predeterminada, busca vistas parciales en la carpeta Ver y en la carpeta Compartida. Pero digamos que quieres agregar uno.

Agrega una clase a tu carpeta de Modelos:

public class NewViewEngine : RazorViewEngine {

   private static readonly string[] NEW_PARTIAL_VIEW_FORMATS = new[] {
      "~/Views/Foo/{0}.cshtml",
      "~/Views/Shared/Bar/{0}.cshtml"
   };

   public NewViewEngine() {
      // Keep existing locations in sync
      base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NEW_PARTIAL_VIEW_FORMATS).ToArray();
   }
}

Luego, en su archivo Global.asax.cs, agregue la siguiente línea:

ViewEngines.Engines.Add(new NewViewEngine());