Maturano
Maturano

Reputation: 1023

asp.net mvc multiple dropdrownlist

I have a form that loads some Partial Views dinamically and one of these Partial Views will load multiple dropdownlists in the screen.

I have a ViewModel (principal): used in the main view

public class CupomFiscalDetalhesViewModel
{
    //some properties
    public IEnumerable<CupomItensViewModel> CupomItens { get; set; }
}

An intermediate ViewModel: the view model of the partial view:

public class CupomItensViewModel
{
    public IEnumerable<TabelaPrecoViewModel> TabelasPreco { get; set; }
    public TabelaPrecoViewModel TabelaPrecoSelecionada { get; set; }
}

Where TabelaPrecos is holding the values that I want to show in the DropDownList. and TabelaPrecoSelecionada will hold the selected value.

In the Controller, I'm used to put the values of an IEnumerable into a ViewBag, and use this ViewBag to generate the dropdownlist in the HTML, like this:

ViewBag.TabelaPrecoSelecionada = new SelectList
(
     detalhesCupomFiscal.CupomItens.FirstOrDefault().TabelasPreco,
     "IdTabela",
     "NomeTabela"
); 

But I have no idea how to generate multiple dropdowns for each option of CupomItensViewModel, without passing the id of the selected value of each dropdownlist to the controller action (by parameter).

In the Html, I use: but would need to change the name to get binding workin somehow.

@Html.DropDownList("TabelaPrecoSelecionada",(IEnumerable<SelectListItem>)ViewBag.TabelaPrecoSelecionada,
new { @class = "form-control dropdown" })

Does anyone has an Idea how to accomplish it?

Upvotes: 0

Views: 67

Answers (1)

Tek
Tek

Reputation: 64

I haven't test this but I would maybe create the select list inside your CupomItensViewModel

using System.Linq;
public class CupomItensViewModel
{
    public IEnumerable<TabelaPrecoViewModel> TabelasPreco { get; set; }
    public TabelaPrecoViewModel TabelaPrecoSelecionada { get; set; }
    public IEnumerable<SelectListItem> TabelasPrecoSelectList
    {
        get 
        {
           return TabelasPreco.Select(x => new SelectListItem() 
                  {
                    Value = x.IdTabela
                    Text = x.NomeTabela
                    Selected = TabelaPrecoSelecionada.IdTabela
                  }
        }
    }
}

And Inside your view

@foreach(var item in Model.CupomItens)
{
  @Html.DropDownList("TabelaPrecoSelecionada", item.TabelasPrecoSelectList, new { @class = "form-control dropdown" })
}

But if these dropdowns aren't going to be next to each other, I would make

public IEnumerable<CupomItensViewModel> CupomItens { get; set; }

List instead and using index to identify them. CupomItens[x]

Just my 2 cent without checking if it works. Hopefully it helps.

Upvotes: 0

Related Questions