Pregunta

Si creo un PartialView para un cuadro que contiene un encabezado, una imagen y un contenido, ¿cuál es la mejor manera de almacenar el contenido sin utilizar una base de datos?

Ejemplo: TurboTax

Dudo que el contenido de los cuadros en la barra lateral se almacene en una base de datos, pero para hacer un código reutilizable sería beneficioso crear la estructura en PartialView y llenar las áreas de contenido. Puedo crear una vista parcial y pasar un modelo desde el controlador principal a la vista parcial, pero luego me quedaría atascado copiando y pegando el mismo contenido si quisiera usar el mismo cuadro en otra página.

¿Fue útil?

Solución

Para contenido fijo, es posible que desee pensar en usar XML + XSLT o incluso fragmentos de código HTML en el sistema de archivos y simplemente procesarlos. Un método HtmlHelper podría tener más sentido para esto que una vista parcial: Html.RenderXml () o Html.Include (). La única diferencia real entre estas vistas y las vistas parciales es que el motor de vista no se invoca, ya que no hay sustituciones. Hago este tipo de cosas con mi política de privacidad y los términos y condiciones. Sin duda consideraría mantener estos en caché.

Si realmente son plantillas y solo está sustituyendo el contenido, creo que la vista parcial funciona bien y consideraría colocar los datos en una base de datos, de nuevo, tal vez utilizando el almacenamiento en caché si encuentro que el rendimiento ha sufrido. Puede usar esto en combinación con el anterior; digamos, mantenga sus imágenes / xml en el sistema de archivos y un puntero hacia ellos en la base de datos para que sepa cuáles elegir en el parcial.

Otros consejos

La transferencia de datos a la vista parcial que se usa en muchos lugares se puede hacer de muchas maneras:

Cree una clase de modelo base para todos sus modelos. En la clase base, defina la propiedad PartialModel que mantendrá el modelo para la vista parcial (puede haber muchos de ellos si el uso tiene muchas vistas parciales). Ahora puede llenar la propiedad PartialModel en la acción del controlador, pero para hacer que el código sea más reutilizable, puede crear su propio Filtro de acción que insertará los datos de la vista parcial justo después de que se ejecute el método de acción (pero antes de que el modelo se pase a la vista)

public class PartialViewModelAttribute : ActionFilterAttribute
{
  public override void OnActionExecuted(ActionExecutedContext filterContext)
  {
     BaseViewModel model;

     if (filterContext.Controller.ViewData.Model == null)
     {
          model = new BaseViewModel();
          filterContext.Controller.ViewData.Model = model;
     }
     else
     {
        model = filterContext.Controller.ViewData.Model as BaseViewModel;
     }

     model.PartialModel = new PartialModel(...)   // Partial model initialization
     base.OnActionExecuted(filterContext);
  }
}

Entonces puedes usarlo como:

[PartialViewModel]
public ActionResult Index()
{
  //...
}

Otra opción: puede crear la clase BaseController para todos sus controladores y crear PartialModel en la inicialización del controlador base. Entonces PartialModel puede almacenarse en el diccionario ViewData []. Debido a que el uso del diccionario ViewData en las vistas es malo, cree un método de extensión en HtmlHelper como:

public static PartialModel GetPartialModel(this HtmlHelper helper)
{
   return helper.viewContext.ViewData["PartialModel"] as PartialModel
}

Para que pueda obtener el modelo de esta manera:

<% Html.RenderPartial("MyPartial", Html.GetPartialModel()); %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top