Send object list to View, by Viewbag Asp.net

Asked

Viewed 548 times

1

I’d like to get some data: Class:

 public class Produto
    {
        public Produto()
        {
            this.Categoria = new HashSet<Categoria>().ToList();
        }

        #region Atributos
        [Key]
        public int ProdutoId { get; set; }
        [Required(ErrorMessage ="o nome deve ser preenchido")]
        public string NomeDoProduto { get; set; }
        [Required(ErrorMessage = "o codigo deve ser preenchido")]
        public string CodProduto { get; set; }
        [Required(ErrorMessage ="o preço deve ser preenchido")]
        public decimal PrecoDeAtacado { get; set; }
        [Required(ErrorMessage = "o preço deve ser preenchido")]
        public decimal PrecoDeVarejo { get; set; }
        [MaxLength(1200)]
        public string Informacoes { get; set; }
        [MaxLength(1200)]
        public string Decricao { get; set; }
        public bool? Disponibilidade { get; set; }
        public int Quatidade { get; set; }


        #endregion

        #region Chaves Estrangeiras
        public int CorId { get; set; }
        public virtual Cor Cor { get; set; }
        public int TamanhoId { get; set; }
        public virtual Tamanho Tamanho { get; set; }
        public int ImagemId { get; set; }
        public virtual Imagem Imagem { get; set; }
        public virtual IEnumerable<Comentario> Comentario { get; set; }
        public virtual List<Categoria> Categoria { get; set; }

        #endregion
    }

The product has Color, and Size. This product has the cód 123 i have more products with the cod 123 For example:

Produto: Sapato Mocacin - Id: 1 - Cod: 123 - Tamanho: 39 - Cor: Preto
Produto: Sapato Mocacin - Id: 2 - Cod: 123 - Tamanho: 40 - Cor: Preto
Produto: Sapato Mocacin - Id: 3 - Cod: 123 - Tamanho: 39- Cor: Marrom

In my index, I am showing only 1 product of the type

Sapato Mocacin que tem o cod= 123

In my View details I show the product details, from which the user clicked, would like to know how I do to show the sizes and colors, of the product that has the cod 123 I want to make a query, play in a viewbag, and in the detailed view create a dropdownlist for the options of this view bag, be it the color or the size.

Controller:

public ActionResult Detalhes(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Produto produto = db.ProdutoDb.Find(id);
            if (produto == null)
            {
                return HttpNotFound();
            }


            var geral = db.ProdutoDb.Where(x => x.CodProduto == produto.CodProduto);


            return View(produto);
        }

2 answers

1


Check the list of your database:

public List<Produto> ListaProduto()
{

    var listaProduto  = new List<Produto>();
    var objLista = context.TB_Produto.ToList();
    foreach (var item in objLista)
    {
        var produto = new Produto();
        produto.ProdutoId = item.ProdutoId;
        produto.NomeDoProduto = item.CodProduto + "-" + item.Tamanho + "-" + item.Cor;
        listaProduto.Add(produto);
    }  
    Return listaProduto 
}

In the controller you can do so:

var listaProdutos = new ListaDeProdutos();
ViewBag.ddlProdutos = new SelectList(listaProdutos, "ProdutoId", "NomeDoProduto");

In the view you can do so:

                        <div class="col-md-5">
                        <div class="editor-label">
                            <label for="ddlProdutos ">Selecione o Produto</label>
                        </div>
                        <div class="editor-field">
                            @Html.DropDownList("ddlProdutos", string.Empty)
                        </div>
                    </div>

I hope it helps you!

  • I believe he doesn’t want to show the name of the product with all this information. For those who are using the system it does not make much sense to see the Id and Code of this example. But probably it could take useful example of the answer. :)

0

You can select Colors and Sizes from your var geral. Thus:

var geral = db.ProdutoDb.Where(x => x.CodProduto == produto.CodProduto);

        ViewBag.TodasCores = 
            geral.Where(x => x.CodProduto == produto.CodProduto)
            .Select(s => s.Cor).Select(s => new SelectListItem
            {
                Value = s.CorId.ToString(),
                Text = s.Descricao
            });

        ViewBag.TodosTamanhos = 
            geral.Where(x => x.CodProduto == produto.CodProduto)
            .Select(s => s.Tamanho).Select(s => new SelectListItem
            {
                Value = s.Id.ToString(),
                Text = s.Descricao.ToString()
            });

In your View do so to create the Dropdowns with the options:

@Html.DropDownList("Cores", ViewBag.TodasCores as SelectList, new { @class = "form-control" })
@Html.DropDownList("Tamanhos", ViewBag.TodosTamanhos as SelectList, new { @class = "form-control" })

I don’t usually leave my lists DropDowns in ViewBags, I usually have all my fields in my ViewModels, but in its setting and with ViewBags, as requested, this would be one of the ways to make.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.