MVC 5 Dropdownlist用于在编辑视图中进行多选值绑定

时间:2019-01-07 08:15:54

标签: c# asp.net-mvc jquery-select2 dropdownlistfor

我在编辑视图中有一个select2多选下拉列表。当我尝试将所选值绑定到下拉列表时,它无法绑定。任何帮助表示赞赏。请从* .cshtml和* .cs文件中找到以下代码段。

Map<E,R> map = new HashMap<E,R>();
public List<D> method(String countryname) { 
   return map.values().stream().filter((x)->{
        return x.getSet().stream().anyMatch((t) -> {
            return t.getCountry().equals(countryname); 
        });
    })
    .map(R::getSet)
    .flatMap(List::stream)
    .collect(Collectors.toList()); //does not compile
}

// the R class
class R {
    private Set<D> set = new TreeSet<D>();
    //getters & setters & other attributes
}

项目模型具有以下项目。属性ItemsSelected不为null且其中具有3个值,ViewBag.ItemsBag也不为null且具有数据库中的所有项目。这两个属性的类型均为SelectListItem,其属性为Text和Value。

@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() })
            };

2 个答案:

答案 0 :(得分:3)

由于您在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属性的类型为{{1},并且所有值都可以转换为int,请尝试使用int / List<int>类型而不是{{1 }} / int[]

List<string>

答案 1 :(得分:0)

请在jQuery文档就绪状态下尝试以下代码:

var result = [1,3,5];// Array of SelectedValues
$("#DropdownID").val(result); // DropdownID = your multi select dropdown Id