Ответ 1
Потому что так работает вспомогательный помощник CheckBoxFor
.
Вам нужно создать html для флажков самостоятельно. Затем скрытые входы не генерируются, и вы получите только выбранные целочисленные значения.
@Html.CheckBox("orderNumbers", new { value = 1 })
@Html.CheckBox("orderNumbers", new { value = 2 })
@Html.CheckBox("orderNumbers", new { value = 3 })
@Html.CheckBox("orderNumbers", new { value = 4 })
@Html.CheckBox("orderNumbers", new { value = 5 })
[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { }
[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { }
Если я использую первую подпись в своем методе действий, я получаю пустой IEnumerable
.
Если я использую вторую подпись, я получаю значения, но также получаю ложное значение для невыделенных значений (из-за шаблона MVCs для затенения всех флажков со скрытым полем).
например. Я получу что-то вроде orderNumbers = { "1", "2", "false", "4", "false" }
Почему я не могу получить список чисел?
Потому что так работает вспомогательный помощник CheckBoxFor
.
Вам нужно создать html для флажков самостоятельно. Затем скрытые входы не генерируются, и вы получите только выбранные целочисленные значения.
Вы можете получить все проверенные значения следующим образом.
Код контроллера:
public ActionResult Index()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string[] orderNumbers)
{
return View();
}
Просмотр кода:
@using (Html.BeginForm())
{
<input name="orderNumbers" type="checkbox" value="1" />
<input name="orderNumbers" type="checkbox" value="2" />
<input name="orderNumbers" type="checkbox" value="3" />
<input name="orderNumbers" type="checkbox" value="4" />
<input name="orderNumbers" type="checkbox" value="5" />
<input type="submit" name="temp" value="hi" />
}
Пожалуйста, помните, что вам нужно указать одинаковое имя для всех флажков. В массиве вы получите значения для всех отмеченных флажков.
В дополнение к alok_dida отличный ответ. Поскольку все значения являются целыми числами, вы можете иметь код контроллера, который принимает массив целых чисел, и не делайте преобразования самостоятельно.
Это работает в MVC4 +:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(int[] orderNumbers)
{
return View();
}