asp.net mvc multiple dropdrownlist

时间:2016-11-11 16:58:55

标签: c# asp.net asp.net-mvc

我有一个表格会以一种方式加载一些部分视图,其中一个部分视图会在屏幕上加载多个下拉列表。

我有一个ViewModel(主体):在主视图中使用

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

中间ViewModel:局部视图的视图模型:

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

TabelaPrecos保存我想要在DropDownList中显示的值。并且TabelaPrecoSelecionada将保留所选值。

在Controller中,我习惯将IEnumerable的值放入ViewBag,并使用此ViewBag在HTML中生成下拉列表,如下所示:

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

但是我不知道如何为CupomItensViewModel的每个选项生成多个下拉列表,而不将每个下拉列表的选定值的id传递给控制器​​操作(通过参数)。

在Html中,我使用:但是需要更改名称以某种方式获得绑定工作。

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

有没有人有想法如何实现它?

1 个答案:

答案 0 :(得分:0)

我没有测试过,但我可能会在你的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
                  }
        }
    }
}

在你的视野中

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

但如果这些下拉列表不会彼此相邻,我会做出

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

改为列出并使用索引来识别它们。 CupomItens [X]

只是我的2美分而不检查它是否有效。希望它有所帮助。