Основная проблема заключается в string
свойство хранит одну строку, вы должны использовать свойство коллекции для привязки с флажками, например, List<string>
как @Ajay упоминалось ранее.
Поэтому вам следует использовать эту настройку:
Модель
public class MyModel
{
public MyModel()
{
SelectedCategories = new List<string>();
// put categories here
Categories = new List<SelectListItem>() { ... };
}
// other properties
public List<string> SelectedCategories { get; set; }
public List<SelectListItem> Categories { get; set; }
}
Вид
@foreach (var item in Model.Categories)
{
<input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
}
Контроллер
[HttpPost]
public ActionResult Index(MyModel model)
{
if (ModelState.IsValid)
{
// create comma-separated values
var selectedCategories = string.Join(",", model.SelectedCategories);
// Save data to database, and redirect to Success page.
return RedirectToAction("Success");
}
}
Если вы хотите использовать CheckBoxFor
помощник, используйте SelectListItem
, который имеет свойство Selected
с типом bool
, потому что CheckBoxFor
связывается с bool
свойством:
Модель
public class MyModel
{
public MyModel()
{
// put categories here
Categories = new List<SelectListItem>() { ... };
}
// other properties
public List<SelectListItem> Categories { get; set; }
}
Вид
@for (var i = 0; i < Model.Categories.Count; i++)
{
@Html.CheckBoxFor(model => model.Categories[i].Selected)
@Html.HiddenFor(model => model.Categories[i].Text)
@Html.HiddenFor(model => model.Categories[i].Value)
}
Контроллер
[HttpPost]
public ActionResult Index(MyModel model)
{
if (ModelState.IsValid)
{
string selectedCategories = string.Join(",",
model.Categories.Where(x => x.Selected == true)
.Select(x => x.Text).ToList());
// Save data to database, and redirect to Success page.
return RedirectToAction("Success");
}
}
Примечание:
Существует пользовательский помощник с именем CheckBoxListFor
, который следует учитывать для создания списка флажков из свойства List<T>
.
Пример реализации списка флажков можетбыть замеченным здесь .
Связанные проблемы:
Получить разделенную запятыми строку из CheckboxList HTML Helper
ПолучитьНесколько выбранных флажков яn MVC