Inquiridor
Partial View / Layout Page / Razor

Pergunta
-
Pessoal,
Eu tenho uma página do tipo (Page Layout) que vai funcionar como uma master-page para meu projeto.
Dentro eu tenho o seguinte código:
<div>
@Html.Partial("_MenuInferior");
</div>
Porém essa view acessa um model diferente de outras páginas, veja o código:
@model List<Projeto.Models.MenuInferiorModel>
@foreach (var item in Model)
{
@Html.DisplayFor(modelItem => item.Titulo)
}
Esse código não funciona, pois a mensagem afirma que o @foreach é null, ou seja não tem dados para percorrer.
Na minha controller eu tenho o código abaixo:
public class MenuInferiorController : Controller
{
private ContextModel db = new ContextModel();
public ViewResult Index()
{
return View(db.MenuInferiorModels.ToList());
}
}
Esse model funciona, pois na view INDEX gerada no CRUD está exibindo sem problemas.
O que estou fazendo de errado ???
______________________________________
Depois vem o segundo problema, as outras páginas passaram a dar erro pois aparentemente existe um conflito entre a declaração @model List<Advus.Elektro.Midia.Models.MenuInferiorModel> feita no início da página.
Podem me ajudar ?
Douglas
Todas as Respostas
-
Douglas,
Uma sugestão que posso te dar é criar um helper, para ser usado em sua master page. Crie uma pasta App_Code no seu projeto, adicione uma partial view chamada MyHelpers ou outro nome qualquer, dentro do arquivo você adiciona sua lógica:
@helper MenuInferior(List<Projeto.Models.MenuInferiorModel menuInferior)
{
foreach (var item in menuInferior)
{
@Html.DisplayFor(modelItem => item.Titulo)
}
}
Na sua master page você chama como chamaria um helper qualquer do Framework.
@MyHelpers.MenuInferior(ViewData.MenuInferior)
Espero ter ajudado.
Atenciosamente, Paulo R. Pereira de Souza
http://paulosouza.net
E-mail: paulorpereirasouza@hotmail.com. -
-
-
-
Douglas, Consegui descobrir uma forma bem elegante de se fazer isso. Primeiro a action do seu controller precisa retornar uma PartialView. Depois la no seu _Layout você pode renderizar utiliando o comando:
@RenderAction("Acao","Controller")
Aqui funcionou bem, acredito que resolva pra você também! Qualquer coisa só postar que a gente arruma uma forma de resolver ;P Grande Abraço!
- Editado leomachado quinta-feira, 29 de setembro de 2011 12:33
-
-
Posto sim...
No momento estou no trabalho e o código em casa, mas assim que chegar eu edito o post e coloco o código.
Mas pra te adiantar... o erro de conversão está sendo na compilação?
Se for pode ser aqui:
public PartialViewResult Index()
{
return PartialView(db.MenuInferiorModels.ToList());
}
Verifica se alterou o tipo de retorno do método também.