Pergunta

Se eu criar uma visualização parcial para uma caixa que contém um cabeçalho, imagem e conteúdo Qual é a melhor maneira de armazenar o conteúdo sem usar um banco de dados?

Exemplo: Turbotax

Duvido que o conteúdo das caixas na barra lateral seja armazenado em um banco de dados, mas, para tornar o código reutilizável, seria benéfico criar a estrutura em uma visualização parcial e preencher as áreas de conteúdo. Eu posso criar uma visualização parcial e passar um modelo do controlador pai para o ParcialView, mas então ficaria preso copiando e colando o mesmo conteúdo, se quisesse usar a mesma caixa em outra página.

Foi útil?

Solução

Para conteúdo fixo, você pode pensar em usar XML+XSLT ou até trechos HTML no sistema de arquivos e simplesmente renderizá -los. Um método htmlhelper pode fazer mais sentido para isso do que uma visão parcial - html.renderxml () ou html.include (). A única diferença real entre essas e visões parciais é que o mecanismo de vista não é chamado, pois não há nenhuma substituição. Eu faço esse tipo de coisa com minha política de privacidade e termos e condições. Eu certamente consideraria manter esses cache.

Se esses realmente são modelos e você está apenas substituindo o conteúdo, acho que a visualização parcial funciona bem e eu consideraria colocar os dados em um banco de dados, novamente, talvez usando o cache se achasse que o desempenho sofreu. Você pode usar isso em combinação com o primeiro - digamos que mantenha suas imagens/XML no sistema de arquivos e um ponteiro para eles no banco de dados para saber quais escolher no parcial.

Outras dicas

Passar dados para visão parcial usada em muitos lugares pode ser feita de várias maneiras:

Crie classe de modelo básico para todos os seus modelos. Na classe Base, defina a propriedade ParcialModel, que estará mantendo o modelo para visualização parcial (pode haver muitos deles se o uso tiver muitas visões parciais). Agora você pode preencher a propriedade ParcialModel na ação do controlador, mas para tornar o código mais reutilizável, você pode criar seu próprio filtro de ação que insira os dados de visualização parcial logo após o método de ação ser executado (mas antes que o modelo seja passado para a exibição)

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);
  }
}

Então você pode usá -lo como:

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

Outra opção: você pode criar a classe BaseController para todos os seus controladores e criar um modelo parcial na inicialização do controlador de base. Em seguida, o modelo parcial pode ser armazenado no dicionário ViewData []. Como o uso do dicionário ViewData no Views é ruim, crie o método de extensão no Htmlhelper como:

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

Então você pode obter o modelo desta maneira:

<% Html.RenderPartial("MyPartial", Html.GetPartialModel()); %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top