Pergunta

Por causa da confusão entre toda a informação que está lá fora sobre MVC de todas as versões de visualização e o lançamento oficial Estou muito confuso como lidar com viewusercontrols. Então, uma vez por todas, me diga como implementar este exemplo:

Eu tenho uma lista de próximos eventos que precisa ser exibido em várias páginas de meu site. Tenho, portanto, colocar um novo ViewUserControl (ListEvents.ascx) dentro da pasta Shared meus Views \.

Eu estou pedindo isso ListEvents.ascx para render em meu ponto de vista Início / Index assim:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>

Como eu iria sobre passando o meu modelo a esta ViewUserControl? Eu sei que posso fazer isso:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

Mas isso não parece ser uma coisa muito inteligente a fazer, criando um novo modelo a partir de dentro de uma visão ?! Ou estou errado aqui? Eu não posso nem passar qualquer validationstate, daí o parâmetro nulo. Então, uma opção alternativa é armazenar esses dados para o membro do ViewData [], mas meu ViewUserControl não é suposto ser dependente do ViewData dele do pai!

Estou certo que há uma resposta muito simples para isso, por favor, compartilhe como eu sou feito navegando na web para este problema.

Obrigado!

Resposta Simples : A ViewUserControl deve sempre recebê-lo do modelo a partir da exibição em que ele reside. Trabalhando em torno deste, como adicionando um arquivo codebehind a um ViewUserControl, iria quebrar o padrão MVC.

Foi útil?

Solução

Por padrão, será usado o mesmo modelo que a página. Se você quiser fornecer um modelo para cada instância de RenderPartial, sua situação é, provavelmente, como prestação de várias entradas em um aplicativo de blog. Você poderia buscar cada modelo de uma coleção em seu modelo de página e passá-lo para o controle de usuário como esta:

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top