coolwolf / 22/03/2018
MVC @Html.DropDownList SelectedValue does not work
I am new to mvc. When i create @Html.DropDownList, i see sometimes i can set SelectedValue but sometimes i can not.
I tried many solutions like creating “<select” manually, passing generic List<>, passing List<SelectListItem>, passing SelectList etc.
But no success. Razor View does no select the item which i want.
After days of searching, i found a blog entry which solve my problem.
My controller side was like that:
public ActionResult Liste(int? MyValue)
{
if (MyValue== null || MyValue == 0) MyValue = 1;
List<SelectListItem> _sl = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem{Text = v.ToString(),Value = ((int)v).ToString()}).ToList();
foreach(SelectListItem _itm in _sl)
{
if (_itm.Value == MyValue.Value.ToString()) _itm.Selected = true;
}
ViewBag.ProductType= _sl;
ViewBag.SelValue= MyValue;
return View();
}
and my Razor View was like that:
@Html.DropDownList("ProductType", (List<SelectListItem>)ViewBag.ProductType, new { @class = "form-control" })
normally there is no problem. Problem occurs only when i try to set selected item. This completely works.
So what is the problem then?
The problem is: The name of dropdown and viewbag constant is same.
When i change my controller to this:
public ActionResult Liste(int? MyValue)
{
if (MyValue== null || MyValue == 0) MyValue = 1;
List<SelectListItem> _sl = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem{Text = v.ToString(),Value = ((int)v).ToString()}).ToList();
foreach(SelectListItem _itm in _sl)
{
if (_itm.Value == MyValue.Value.ToString()) _itm.Selected = true;
}
ViewBag.MyProdList= _sl;
ViewBag.SelValue= MyValue;
return View();
}
and View to this:
@Html.DropDownList("ProductType", (List<SelectListItem>)ViewBag.MyProdList, new { @class = "form-control" })
everything works.
I wonder, why did i not understand this before.
If anyone face same problem, i hope he/she find this blog entry and not spent lot of time as i spent.