Pergunta

Veja o exemplo de querer ter uma barra lateral "itens mais recentes" em todas as páginas do seu site ASP.NET MVC. Eu tenho um NewsItemController, o que é bom para páginas que dedicam sua atenção aos NewsItems. Que tal ter uma barra lateral de notícias aparecendo no controlador de volta para a página inicial? Ou qualquer outro controlador para esse assunto?

Meu primeiro instinto é colocar a lógica para selecionar os 5 principais NewsItems em um controle de usuário que é chamado na Página Master. Dessa forma, todas as páginas recebem uma barra lateral de notícias sem precisar contaminar nenhum dos outros controladores com a lógica do Newsitem. Isso significa colocar a lógica no que eu entendi como a camada de apresentação que normalmente entraria em um controlador.

Eu posso pensar em cerca de meia dúzia de maneiras diferentes de abordá-lo, mas nenhuma delas parece 'certa' em termos de separação de preocupações e outras palavras-de-buzz relacionadas.

Foi útil?

Solução 2

http://eduncan911.com/blog/html-renderaction-for-asp-net-mvc-1-0.aspx

Isso parece abordar a questão - mesmo usando a instância de uma barra lateral - mas usando um recurso não incluído no MVC 1 por padrão.

http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx

Isso também indica que a resposta está na renderização.

Para qualquer outra pessoa interessada, eis como eu acabei fazendo isso. Observe que você precisará a montagem futuros do MVC para renderização.

Basicamente, você teria algo assim em seu controlador:

public class PostController
{

//...

   public ActionResult SidebarBox()
   {
      // I use a repository pattern to get records
      // Just replace it with whatever you use
      return View(repoArticles.GetAllArticles().Take(5).ToList());
   }

//...

}

Em seguida, crie uma visualização parcial para a caixa lateral com o conteúdo que você deseja exibido e na sua página mestre (ou onde quiser exibi -lo), você usaria:

<% Html.RenderAction<PostController>(c => c.SidebarBox()); %> 

Afinal, não é tão difícil.

Outras dicas

Eu acho que você deve considerar colocá -lo em sua página mestre. Seu controlador pode coletar dados (de forma assíncrona, é claro), armazená -los em uma bela propriedade ViewModel para sua visualização (ou em tempdata) e, em seguida, você pode chamar renderpartial () em sua página mestre para renderizar os dados.

O mantém tudo "separado"

  1. Você pode criar um controle do usuário (.ascx) e depois ligar para renderpartial ().
  2. Projete um método no seu controlador com JSONResult como tipo de retorno. Use -o junto com o jQuery.
  3. Use renderaction () conforme sugerido por outros lugares.

Seção de notícias com asp.net MVC

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top