Dados da caixa de conteúdo reutilizáveis no ASP.NET MVC?
-
05-07-2019 - |
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.
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()); %>