如何使用DropDownListFor所以选择多个值?

时间:2016-10-21 05:32:56

标签: asp.net-mvc-4

我有一个模型,在这个模型中我创建了一个List<SelectListItem>来选择多个值,在HTML上显示这些值。这些值来自IList<FormaPagamento>。所以,现在,我需要在模型中添加多个值,但我不能这样做,我选择了多个值但是当我执行提交时,List<SelectListItem>为空。

我怎么能这样做?

尝试。

模型

public class EmpresaModel{
    [Required(ErrorMessage="Informe ao menos uma forma de pagamento disponível")]
    public List<SelectListItem> formasPagto { get; set; }
}

控制器

private List<SelectListItem> getFormasPagto() {
    IList<FormaPagamento> lista = fpDAO.findAll();
    List<SelectListItem> dropDown = new List<SelectListItem>();
    foreach (FormaPagamento x in lista) {
        dropDown.Add(new SelectListItem { Text = x.descricao, Value = Convert.ToString(x.id)});
    }
    return dropDown;
}

public ActionResult add() {
    EmpresaModel model = new EmpresaModel();
    model.formasPagto = getFormasPagto();
    return View(model);
}

public JsonResult addAjax(EmpresaModel model) {     
   Debug.WriteLine("Formas Pagto: " + model.formasPagto.Count);
   return Json(jsonResposta);
}

HTML

@model EmpresaModel
<div class="form-group">
    <label for="name" class="cols-sm-2 control-label">Formas de pagamento disponíveis <img src="~/Imagens/required.png" height="6" width="6"></label>
    @Html.DropDownListFor(model => Model.formasPagto, Model.formasPagto, new { Class = "form-control", placeholder = "Selecione as formas de pagamento disponíveis", @multiple = true})
    @Html.ValidationMessageFor(model => Model.formasPagto)
</div>

1 个答案:

答案 0 :(得分:2)

formasPagtoIEnumerable<SelectListItem> - 您无法将<select>绑定到复杂对象的集合。 <select multiple>仅回发一组简单值(所选选项的值)。

你的模型需要一个属性来绑定,比如说

[Required(ErrorMessage="Informe ao menos uma forma de pagamento disponível")]
public IEnumerable<int> SelectedItems { get; set; }

假设id的{​​{1}}属性为FormaPagamento的类型。另请注意,int属性适用于此属性,而不是[Required]

。要创建SelectList,请使用<select multiple>,而不是LstBoxFor()

DropDownListFor()

旁注:您只需使用

即可
<label for="@Html.IdFor(m.SelectedItems)" class="cols-sm-2 control-label">Formas de pagamento disponíveis
    <img src="~/Imagens/required.png" height="6" width="6">
</label>
@Html.ListBoxFor(m => m.SelectedItems, Model.formasPagto, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.SelectedItems)

model.formasPagto = new SelectList(fpDAO.findAll(), "id", "descricao");

生成model.formasPagto = fpDAO.findAll().Select(x => new SelectListItem { Value = x.id.ToString(), Text = descricao });