編集ビューにselect2multiselectドロップダウンがあります。選択した値をドロップダウンにバインドしようとすると、バインドに失敗します。助けていただければ幸いです。* .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はnullではなく、3つの値があり、ViewBag.ItemsBagもnullではなく、データベースのすべてのアイテムが含まれています。これらのプロパティは両方とも、TextプロパティとValueプロパティを持つSelectListItemタイプです。
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>();
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; }
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加