In controller
, I am creating ViewModel
and filling its properties:
[HttpGet]
public ActionResult Index()
{
PermissionViewModel vm = new PermissionViewModel()
{
Users = new List<UserViewModel>()
{
new UserViewModel()
{
Id = 1,
Email = "foo.bar@example.com",
IsSelected = false,
Permissions = new List<SelectListItem>()
{
new SelectListItem() { Value = "1", Text="Admin" },
new SelectListItem() { Value = "2", Text="Customer" },
new SelectListItem() { Value = "3", Text="Employeer" }
},
SelectedPermissionId = 2,
}
},
Pagination = new List<SelectListItem>() {
new SelectListItem() { Value = "10", Text = "10" },
new SelectListItem() { Value = "20", Text = "20"}
},
};
return View(vm);
}
Now, I want to display data. I am having problem with Permissions
. I set SelectedPermissionId
to 2
, so I expected, that Customer
will be automatically selected.
@foreach (var user in Model.Users)
{
<tr>
<td>@user.Email</td>
<td>
@Html.DropDownListFor(x => user.SelectedPermissionId, user.Permissions)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = user.Id }) | @Html.ActionLink("Delete", "Delete", new { id = user.Id })
</td>
<td>@Html.CheckBoxFor(x => user.IsSelected)</td>
</tr>
}
Unfortunelly Admin
is selected. Why does that happen?
Edit
I found out that If I Move Permissions
and SelectedPermissionId
to PermissionViewModel
then this:
@Html.DropDownListFor(x => x.SelectedPermissionId, Model.Permissions)
Is working. Now Customer
is selected. But I have to have this in UserViewModel
..
Solution
I found solution. I had to change from this:
@Html.DropDownListFor(x => user.SelectedPermissionId, user.Permissions)
To this:
@Html.DropDownListFor(x => user.SelectedPermissionId, new SelectList(user.Permissions, "Value", "Text", user.SelectedPermissionId))
Does anyone know why that was necessary?