我在编辑视图中有一个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() })
};
答案 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