ASP.NET MVC - список флажков не возвращает все значения, разделенные запятыми - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть следующий список флажков:

<input type="checkbox" name="Categories" value="1" />
<input type="checkbox" name="Categories" value="2" />

Моя модель выглядит следующим образом:

public class MyModel
{
  public string Categories { get; set; }

}

Мой контроллер:

 public ActionResult Index(MyModel model)
 {
    if (ModelState.IsValid)
    {

        // Save data to database, and redirect to Success page.

        return RedirectToAction("Success");
    }

 }

Выбор обоих флажков сохраняеттолько одно значение?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Основная проблема заключается в 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

0 голосов
/ 22 ноября 2018

Вы не можете получить значение через запятую напрямую на сервер, я предлагаю изменить класс, как показано ниже

public class MyModel
{
   public List<string> Categories { get; set; }

}

Вы получите список значений, для которых установлен флажок.

Если вы хотите запятуюОтдельное значение затем на стороне клиента необходимо при отправке формы создать функцию и сохранить в скрытой переменной.

Может ли это вам помочь

Спасибо

...