Bouros Ioannis
Bouros Ioannis

Reputation: 83

Show checkbox checked value


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

Answers (1)

Fei Han
Fei Han

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

enter image description here

Upvotes: 1

Related Questions