How to set multiple selected value and show them in dropdownlist with MVC?
I suggest that you use the MultiSelectList. Shown below is sample:
Model
Note that the MultiSelectList is used.
public class MultiCategoryViewModel
{
public int[] Category { get; set; }
public MultiSelectList Categories { get; set; }
}
Controller / Action Method
public async Task<IActionResult> Edit3()
{
int[] selected = new int[] { 1, 3, 5 };
var categoryList = await _context.Categories.ToListAsync();
ViewBag.CategoryId = new MultiSelectList(categoryList,
"CategoryId",
"CategoryName",
selected);
var model = new MultiCategoryViewModel
{
Category = selected,
Categories = new MultiSelectList(categoryList,
"CategoryId",
"CategoryName")
};
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Edit3(int[] categoryid,
int[] categoryid2,
int[] category)
{
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View();
}
View
@model MvcCore5App.Controllers.MultiCategoryViewModel
@{
ViewData["Title"] = "Edit3";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Edit3</h1>
<div class="row">
<div class="col-md-4">
<form asp-action="Edit3">
<div class="form-group">
<label class="control-label" for="CategoryId">
@@Html.DropDownList 利用
</label>
@Html.DropDownList("CategoryId", null,
htmlAttributes: new
{
@class = "form-control",
multiple = "multiple"
})
</div>
<div class="form-group">
<label class="control-label" for="CategoryId2">
タグヘルパー <select> + ViewBag 利用
</label>
<select id="categoryid2" name="categoryid2"
asp-items="@ViewBag.CategoryId"
multiple="multiple"
class="form-control">
</select>
</div>
<div class="form-group">
<label class="control-label" for="CategoryId2">
タグヘルパー <select> + Model 利用
</label>
<select asp-for="Category"
asp-items="Model.Categories"
class="form-control">
</select>
</div>
<div class="form-group">
<input type="submit" value="Create"
class="btn btn-primary" />
</div>
</form>
</div>
</div>
Result: