Проблема: Я генерирую @Html.ListBoxFor
на основе запроса базы данных в моем HttpGet. Во время моей HttpPost я хочу подтвердить, что выбран хотя бы один элемент. Если нет, я просто хочу добавить сообщение проверки.Как сохранить все значения в элементе, выбранном из @ Html.ListBoxFor на веб-странице MVC.net?
Текущий результат: Получаю сообщение «Пожалуйста, выберите хотя бы один элемент», но теперь выбор пуст (элемент выбора есть, но содержит 0 параметров). Я понимаю, что Model.Items
будет null в моей HttpPost.
Вопрос: Как использовать мою модель для сохранения Model.Items
, чтобы сделать ее не нулевой?
Дополнительная информация: Я стараюсь избегать использования FormCollection collection
и дополнительного JavaScript.
--The code--
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
MyViewModel model = new MyViewModel
{
Items = Enumerable.Range(1, 5).Select(x => new SelectListItem
{
Value = x.ToString(),
Text = "item " + x
})
};
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
Модель:
public class MyViewModel
{
public MyViewModel()
{
Items = new List<SelectListItem>();
}
[Required(ErrorMessage = "Please select at least one item")]
public string[] SelectedItems { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
Вид:
@model ProjectGenerator.Models.MyViewModel
@using (Html.BeginForm())
{
@Html.ListBoxFor(x => x.SelectedItems, Model.Items)
@Html.ValidationMessageFor(x => x.SelectedItems)
<button type="submit">OK</button>
}
Вам нужно заселить 'SelectList' в методе POST прежде чем вы вернете представление (как и в методе GET). Вы не создаете (не должны) создавать входы для каждого 'SelectListItem', чтобы они не были в данных формы. –