MVC 5 Dropdownlist для связывания множественного выбора значения в режиме редактирования - PullRequest
0 голосов
/ 07 января 2019

У меня есть выпадающий список select2 multiselect в режиме редактирования. Когда я пытаюсь привязать выбранные значения к раскрывающемуся списку, он не может быть привязан. Любая помощь приветствуется. Ниже приведены фрагменты кода из файлов * .cshtml и * .cs.

@Html.DropDownListFor(model => model.Items, new MultiSelectList(ViewBag.ItemsBag, "Value", "Text", Model.ItemsSelected.Select(x => x.Value)), new { @class = "form-control features-segments select2-multiselect-checkbox", multiple = "multiple" })

ViewBag.ItemsBag = db.Items.Select(v => new SelectListItem
            {
                Text = v.ItemName,
                Value = v.ItemId.ToString()
            });

ModelVM modelVM = new ModelVM()
            {
                ItemsSelected = SelectedItems.Items.Select(x => new SelectListItem() { Text = x.ItemName, Value = x.ItemId.ToString() })
            };

Модель имеет следующие элементы. Свойство ItemsSelected не является нулевым и имеет 3 значения, а ViewBag.ItemsBag также не является нулевым и содержит все элементы из базы данных. Оба эти свойства имеют тип SelectListItem со свойствами Text и Value.

public int FeatureId { get; set; }
public string FeatureName { get; set; }
public string ReferenceName { get; set; }
public FeatureSection SectionName { get; set; }//Enum
public FeatureType Type { get; set; }//Enum
public bool DefaultBoolValue { get; set; }
public string DefaultTextValue { get; set; }
public IEnumerable<SelectListItem> ItemsSelected { get; set; }
public virtual ICollection<Item> Items { get; set; } = new List<Item>();

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Пожалуйста, попробуйте следующий код в состоянии готовности документа jQuery:

var result = [1,3,5];// Array of SelectedValues
$("#DropdownID").val(result); // DropdownID = your multi select dropdown Id
0 голосов
/ 07 января 2019

Так как у вас есть значения элементов, предоставленные в определении ViewBag, как это, которое ясно указывает на строковые значения:

ViewBag.ItemsBag = db.Items.Select(v => new SelectListItem
{
    Text = v.ItemName,
    Value = v.ItemId.ToString() // implies all values are strings
});

Тогда свойство, связанное с DropDownListFor / ListBox, должно иметь тип List<string> или string[], чтобы связать его правильно. Использование ICollection<Item> не будет связывать, потому что это сложный объект, в то время как помощнику требуются типы значений (числовые типы / строки) для привязки.

Следовательно, вы должны сначала создать свойство с типом List<string>:

public List<string> SelectedValues { get; set; }

А затем используйте ListBoxFor помощник с этим свойством вместо:

@Html.ListBoxFor(model => model.SelectedValues, new MultiSelectList(ViewBag.ItemsBag, "Value", "Text", Model.ItemsSelected.Select(x => x.Value)), new { @class = "form-control features-segments select2-multiselect-checkbox", multiple = "multiple" })

Примечание:

Если свойство ItemId имеет тип int (и все значения могут быть преобразованы в int), попробуйте использовать тип List<int> / int[] вместо List<string> / string[]:

public List<int> SelectedValues { get; set; }
...