2016-10-21 4 views
1

私はモデルを持っています。このモデルでは、これらの値が表示されているHTML上で複数の値を選択するためにList<SelectListItem>を作成しました。これらの値はIList<FormaPagamento>です。だから、私はモデルに複数の値を追加する必要がありますが、私はこれを行うことはできません。私は複数の値を選択していますが、私がサブミットするときにList<SelectListItem>は空です。DropDownListForの使い方は複数選択できますか?

どうすればいいですか?

お試しください。

モデル

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> 

答えて

2

formasPagtoIEnumerable<SelectListItem>です。複雑なオブジェクトのコレクションに<select>をバインドすることはできません。 <select multiple>は、単純な値の配列(選択されたオプションの値)を返すだけです。

あなたのモデルは、FormaPagamentoidプロパティがtypeof演算intであると仮定し

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

言うに結合する性質を必要とします。また、[Required]属性がこのプロパティに適用され、SelectListには適用されません。

.ANDない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) 

サイドノート、あなたがLstBoxFor()を使用<select multiple>を作成するには:あなたは、単にSelectList

を生成する

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

または

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

を使用することができます

+0

非常にいいです、ありがとう! – FernandoPaiva

関連する問題