Reputation: 83
First of all, I want to say that I'm very new to ASP.Net and MVC environment.
I'm trying to display a checkbox list in my view but I can't emulate the checked value of the input tag.
Below is my code.
Model
public class EditUser {
public int UserID { get; set; }
public string Username { get; set; }
[Display(Prompt = "Password")]
public string Password { get; set; }
[Display(Prompt = "ConfirmPassword")]
public string ConfirmPassword { get; set; }
public int GroupID { get; set; }
public string GroupName { get; set; }
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
public bool HaveAccess { get; set; }
}
Controller
public IActionResult Admin(string message) {
EditUser euModel = new EditUser();
List<EditUser> HaveAccess = new List<EditUser> {
new EditUser { DepartmentID = 1, DepartmentName = "IT", HaveAccess=true },
new EditUser { DepartmentID = 2, DepartmentName = "Financial", HaveAccess=true },
new EditUser { DepartmentID = 3, DepartmentName = "Sales", HaveAccess=true }
};
ViewBag.haveAccess = HaveAccess;
return View(euModel);
}
View
<form asp-controller="Admin" asp-action="HaveAccess" method="post" class="form-horizontal" role="form">
<div class="alert-danger" asp-validation-summary="ModelOnly"></div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
<ul asp-for="haveAccess" class="control-label">
@foreach (var item in (new SelectList(ViewBag.haveAccess, "DepartmentID", "DepartmentName", "HaveAccess")))
{
<li class="checkbox-label">
<div class="checkbox">
@Html.CheckBox("HaveAccess", @item.Selected)
@Html.Label("HaveAccess", @item.Text)
</div>
</li>
}
</ul>
</div>
</form>
I believe that I read the data in a wrong way of how controller returns to my view. Because I get the "DepartmentID" and "DepartmentName" in the view I can't find the "HaveAccess" which is the bool that I want to pass to the checked value.
Can anyone point me to the right direction?
Sorry for my bad English and thanks in advance for your help.
Regards
Upvotes: 0
Views: 1589
Reputation: 27803
I get the "DepartmentID" and "DepartmentName" bet in the view I can't find the "HaveAccess" which is the bool that I want to pass to the checked value.
Can anyone point me to the right direction?
To achieve your requirement, you can try to modify the code as below.
In controller
public IActionResult Admin()
{
EditUser euModel = new EditUser();
List<EditUser> HaveAccess = new List<EditUser> {
new EditUser { DepartmentID = 1, DepartmentName = "IT", HaveAccess=true },
new EditUser { DepartmentID = 2, DepartmentName = "Financial", HaveAccess=false },
new EditUser { DepartmentID = 3, DepartmentName = "Sales", HaveAccess=true }
};
var selectedValues = HaveAccess.Where(a => a.HaveAccess == true).Select(u => u.DepartmentID).ToArray();
ViewBag.haveAccess = new MultiSelectList( HaveAccess, "DepartmentID", "DepartmentName", selectedValues);
return View(euModel);
}
In view
<ul asp-for="haveAccess" class="control-label">
@foreach (var item in (ViewBag.haveAccess as MultiSelectList))
{
<li class="checkbox-label">
<div class="checkbox">
@Html.CheckBox("HaveAccess", @item.Selected)
@Html.Label("HaveAccess", @item.Text)
</div>
</li>
}
</ul>
Test Result
Upvotes: 1