none
Dúvida de multipla Classes na mesma View ? RRS feed

  • Pergunta

  • Boa tarde sou iniciante em MVC e estou com dúvidas quanto ao padrão. Pois pelo que li a View tem o trabalho de apresentar a informação, porém por padrão cada View tem seu Model gerador de si. Então tenho dúvidas se o modo como estou fazendo está correto.

    Vejam o código abaixo para apresentação de dados de 2 classes na mesma View apenas para exemplo :

    Pai :

    namespace MVCEstudo.Models
    {
        public class Pai
        {
    
            public int IdPai { get; set; }
            public string NomePai { get; set; }
    
    
            public Pai()
            {
                IdPai = int.MinValue;
                NomePai = null;
            }
    
        }
    }
    


    Filho :

    namespace MVCEstudo.Models
    {
        public class Filho
        {
    
            public int IdFilho { get; set; }
            public int IdPai { get; set; }
            public string NomeFilho { get; set; }
    
            public Filho()
            {
    
                IdFilho = int.MinValue;
                IdPai = int.MinValue;
                NomeFilho = null;
            }
        }
    }
    


    Familia :

    namespace MVCEstudo.Models
    {
        public class Familia
        {
            public List<Pai> Pai { get; set; }
            public List<Filho> Filho { get; set; }
        }
    }


    Controller Familia :

    namespace MVCEstudo.Controllers
    {
        public class FamiliaController : Controller
        {
            //
            // GET: /Familia/
    
            public ActionResult Index()
            {
                MVCEstudo.Models.Pai Pai = new Models.Pai();
                List<MVCEstudo.Models.Pai> ListaPai = new List<Models.Pai>();
    
                Pai.IdPai = 1;
                Pai.NomePai = "Márcio";
                ListaPai.Add(Pai);
                Pai = null;
                Pai = new Models.Pai();
    
    
                Pai.IdPai = 2;
                Pai.NomePai = "José";
                ListaPai.Add(Pai);
    
                Pai = null;
                Pai = new Models.Pai();
    
                Pai.IdPai = 3;
                Pai.NomePai = "Daniel";
                ListaPai.Add(Pai);
                Pai = null;
                Pai = new Models.Pai();
    
              //  ViewData["ListaPai"] = ListaPai;
    
    
    
                MVCEstudo.Models.Filho Filho = new Models.Filho();
                List<MVCEstudo.Models.Filho> ListaFilho = new List<Models.Filho>();
    
                Filho.IdFilho = 1;
                Filho.IdPai = 1;
                Filho.NomeFilho = "Davi";
                ListaFilho.Add(Filho);
                Filho = null;
                Filho = new Models.Filho();
    
                Filho.IdFilho = 2;
                Filho.IdPai = 1;
                Filho.NomeFilho = "Michel";
                ListaFilho.Add(Filho);
                Filho = null;
                Filho = new Models.Filho();
    
    
               // ViewData["ListaFilho"] = ListaFilho;
    
    
                MVCEstudo.Models.Familia P = new Models.Familia();
    
                P.Pai = ListaPai;
                P.Filho = ListaFilho;
    
                return View(P);
            }
    
        }
    }


    View Familia :

    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Index</h2>
    
    
    
    <br />
    
    <h1>Lista Pai | Filho : </h1>
    
    <ul>
    @foreach (var P in Model.Pai)
    {
    <li> @P.NomePai  </li>
    }
    
    </ul>
    
    <hr />
    
    
    <ul>
    @foreach (var F in Model.Filho)
    {
    <li> @F.NomeFilho  </li>
    }
    
    </ul>
    

    Minha pergunta é está correto fazer dessa forma ? Estou Quebrando o padrão MVC ?

    Outra questão como poderia melhorar a minha solução (código) ?


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    quarta-feira, 9 de janeiro de 2013 15:45

Respostas

  • É  que o codigo está em verde veja :

    @foreach (var P in Model.Pai)
    {
    <li> @P.NomePai  </li>
    }


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    ah, kkkk estou tão acostumado com verde sendo comentário na view que eu pulo ahurahruahruahruahruarhuahruarh

    desculpa;

    analisando apenas a view, não tem nada de errado não, segue um exemplo semelhante pra você ver...

    <fieldset>
            <legend>Fields</legend>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Id) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Id) %>
                <%: Html.ValidationMessageFor(model => model.Id) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Title) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Title) %>
                <%: Html.ValidationMessageFor(model => model.Title) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.ReleaseDate) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.ReleaseDate) %>
                <%: Html.ValidationMessageFor(model => model.ReleaseDate) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Genre) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Genre) %>
                <%: Html.ValidationMessageFor(model => model.Genre) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Price) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Price) %>
                <%: Html.ValidationMessageFor(model => model.Price) %>
            </div>
           
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>


    Aprendendo Ad Eternum

    • Marcado como Resposta Davi Murilo quarta-feira, 9 de janeiro de 2013 18:12
    quarta-feira, 9 de janeiro de 2013 18:07

Todas as Respostas

  • por que chama a view como view familia se nela só tem o model do filho?

    Aprendendo Ad Eternum

    quarta-feira, 9 de janeiro de 2013 17:21
  • É  que o codigo está em verde veja :

    @foreach (var P in Model.Pai)
    {
    <li> @P.NomePai  </li>
    }


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    quarta-feira, 9 de janeiro de 2013 17:52
  • É  que o codigo está em verde veja :

    @foreach (var P in Model.Pai)
    {
    <li> @P.NomePai  </li>
    }


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    ah, kkkk estou tão acostumado com verde sendo comentário na view que eu pulo ahurahruahruahruahruarhuahruarh

    desculpa;

    analisando apenas a view, não tem nada de errado não, segue um exemplo semelhante pra você ver...

    <fieldset>
            <legend>Fields</legend>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Id) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Id) %>
                <%: Html.ValidationMessageFor(model => model.Id) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Title) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Title) %>
                <%: Html.ValidationMessageFor(model => model.Title) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.ReleaseDate) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.ReleaseDate) %>
                <%: Html.ValidationMessageFor(model => model.ReleaseDate) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Genre) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Genre) %>
                <%: Html.ValidationMessageFor(model => model.Genre) %>
            </div>
           
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Price) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Price) %>
                <%: Html.ValidationMessageFor(model => model.Price) %>
            </div>
           
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>


    Aprendendo Ad Eternum

    • Marcado como Resposta Davi Murilo quarta-feira, 9 de janeiro de 2013 18:12
    quarta-feira, 9 de janeiro de 2013 18:07
  • Ok Obrigado pela resposta.

    Fico preocupado em quebrar padrões e fazer gambiarras quando na verdade existe um modo mais simples e tecnicamente mais adequado.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    quarta-feira, 9 de janeiro de 2013 18:12