none
Dúvida de iniciante RRS feed

  • Pergunta

  • Pessoal, estou criando uma aplicação básica em ASP.NET MVC 4 utilizando uma base de dados em SQL Server 2014 e o Entity Framework Wizard do Visual Studio para analistar todo o código gerado. Para criar uma view e listar os dados utilizei o Scaffold template. Minha dúvida é com relação a classe que foi associada automaticamente na view como @model IEnumerable<ModeloLayout.Models.CountryRegion>. Olhando todos os códigos das classes geradas em Model, não encontrei qual é do tipo IEnumerable para o Visual Studio ter feito essa associação automática como uma classe IEnumerable<ModeloLayout.Models.CountryRegion>.

    Como eu sei que tenho que informar, IEnumerable, caso eu escreva a View manualmente em vez de usar o Scaffold?

    Segue o código geraldo para que vocês possam sanar a minha dúvida.

    Controller:

    -----------

      public class HomeController : Controller
        {
            private EntidadesAdventureWorks2012 db = new EntidadesAdventureWorks2012();
            public ActionResult Index()
            {
                var cidades = db.CountryRegion;
                return View(cidades);
            }

        }

    Model:

    ----------

        public partial class CountryRegion
        {
            public string CountryRegionCode { get; set; }
            public string Name { get; set; }
            public System.DateTime ModifiedDate { get; set; }
        }

    View:

    -------

    @model IEnumerable<ModeloLayout.Models.CountryRegion>

    @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_LayoutModelo.cshtml";
    }

    <h2>Index</h2>

    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.CountryRegionCode)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ModifiedDate)
            </th>
            <th></th>
        </tr>

    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CountryRegionCode)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ModifiedDate)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>
    }

    </table>

    segunda-feira, 20 de abril de 2015 15:20

Respostas

  • Cara o IEnumerable é uma coleção. Nesse caso, a view vai te retorna a lista de objetos já inseridos no banco de dados.
    Exemplo:

    // Entidade Pessoa
    public class Pessoa
    {
      public int Id{ get; set; }
      public string Nome { get; set; }
    }
    
    public class Exemplo
    {
      List<Pessoa> listaPessoas;
    
      public void AdicionarPessoas()
      {
        listaPessoas = new List<Pessoa>();
        listaPessoas.Add(new Pessoa(){ Id = 2, Nome = "Segunda Pessoa"});
        listaPessoas.Add(new Pessoa(){ Id = 3, Nome = "Terceira Pessoa"});
        listaPessoas.Add(new Pessoa(){ Id = 4, Nome = "Quarta Pessoa"});
      }
    
      public IEnumerable<Pessoa> RecuperarPessoas()
      {
         return listaPessoas;
      }
    
    }
    • Sugerido como Resposta Renato GroffeMVP segunda-feira, 20 de abril de 2015 16:25
    • Marcado como Resposta LWMN segunda-feira, 20 de abril de 2015 16:38
    segunda-feira, 20 de abril de 2015 16:23
  • O que o Alexandre disse está correto.

    Normalmente vc utilizará IEnumerable junto com o tipo que representa uma entidade em cenários que envolvam a consulta a vários registros. Para a inclusão, alteração ou exclusão de um registro, a View correspondente irá utilizar apenas a classe que corresponde à entidade (dispensando assim o uso de IEnumerable).

    No caso específico que vc apresentou, a entidade em questão é representada pela classe ModeloLayout.Models.CountryRegion.

    • Sugerido como Resposta Renato GroffeMVP segunda-feira, 20 de abril de 2015 16:27
    • Marcado como Resposta LWMN segunda-feira, 20 de abril de 2015 16:38
    segunda-feira, 20 de abril de 2015 16:27

Todas as Respostas

  • Cara o IEnumerable é uma coleção. Nesse caso, a view vai te retorna a lista de objetos já inseridos no banco de dados.
    Exemplo:

    // Entidade Pessoa
    public class Pessoa
    {
      public int Id{ get; set; }
      public string Nome { get; set; }
    }
    
    public class Exemplo
    {
      List<Pessoa> listaPessoas;
    
      public void AdicionarPessoas()
      {
        listaPessoas = new List<Pessoa>();
        listaPessoas.Add(new Pessoa(){ Id = 2, Nome = "Segunda Pessoa"});
        listaPessoas.Add(new Pessoa(){ Id = 3, Nome = "Terceira Pessoa"});
        listaPessoas.Add(new Pessoa(){ Id = 4, Nome = "Quarta Pessoa"});
      }
    
      public IEnumerable<Pessoa> RecuperarPessoas()
      {
         return listaPessoas;
      }
    
    }
    • Sugerido como Resposta Renato GroffeMVP segunda-feira, 20 de abril de 2015 16:25
    • Marcado como Resposta LWMN segunda-feira, 20 de abril de 2015 16:38
    segunda-feira, 20 de abril de 2015 16:23
  • O que o Alexandre disse está correto.

    Normalmente vc utilizará IEnumerable junto com o tipo que representa uma entidade em cenários que envolvam a consulta a vários registros. Para a inclusão, alteração ou exclusão de um registro, a View correspondente irá utilizar apenas a classe que corresponde à entidade (dispensando assim o uso de IEnumerable).

    No caso específico que vc apresentou, a entidade em questão é representada pela classe ModeloLayout.Models.CountryRegion.

    • Sugerido como Resposta Renato GroffeMVP segunda-feira, 20 de abril de 2015 16:27
    • Marcado como Resposta LWMN segunda-feira, 20 de abril de 2015 16:38
    segunda-feira, 20 de abril de 2015 16:27
  • O que o Alexandre disse está correto.

    Normalmente vc utilizará IEnumerable junto com o tipo que representa uma entidade em cenários que envolvam a consulta a vários registros. Para a inclusão, alteração ou exclusão de um registro, a View correspondente irá utilizar apenas a classe que corresponde à entidade (dispensando assim o uso de IEnumerable).

    No caso específico que vc apresentou, a entidade em questão é representada pela classe ModeloLayout.Models.CountryRegion.

    No exemplo que o Alexandre informou ficou bem claro o uso do IEnumerable porque ele tem a classe pessoas, mas no meu código ficou confuso porque a minha classe CountryRegion não está como uma coleção ou informada como IEnumerable, por isso surgiu a dúvida dessa interface especificada na minha View.

    Mas deu para exclarecer a minha dúvida!

    Obrigado Renato e Alexandre!

    segunda-feira, 20 de abril de 2015 16:38