#asp.net-mvc-4
#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:
formasPagto
является IEnumerable<SelectListItem>
— вы не можете привязать <select>
к коллекции сложных объектов. <select multiple>
Возвращает только массив простых значений (значения выбранных параметров).
Вашей модели требуется свойство для привязки, скажем
[Required(ErrorMessage="Informe ao menos uma forma de pagamento disponível")]
public IEnumerable<int> SelectedItems { get; set; }
предполагая, что id
свойством FormaPagamento
является typeof 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
});
чтобы сгенерировать SelectList