Как я могу получить выбранное значение флажка, когда он отмечен в представлении редактирования - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь получить значение выбранного флажка из базы данных. Когда я нажимаю на кнопку редактирования, все данные извлекаются, но значение флажка не восстанавливается в представлении редактирования.

Это мое представление создания

<div class="form-group">
            @Html.LabelFor(model => model.Hobby, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @foreach (var item in Model.AvailableHobbies)
                {
                    <div class="checkbox">
                        <label>
                            <input type="checkbox"
                                   name="SelectedHobbies"
                                   value="@item.Value"
                                   Text="@item.Text"
                                   @if (Model.SelectedHobbies.Contains(Int32.Parse(item.Value))) { <text> checked </text> } /> @item.Text
                        </label>
                    </div>
                }
            </div>
            @Html.ValidationMessageFor(model => model.Hobby, "", new { @class = "text-danger" })
        </div>

Это мой контроллер

public ActionResult Edit(int? id, HttpPostedFileBase file)
        {
            EmployeeDataAccessLayer objemployee = new EmployeeDataAccessLayer();
            objemployee.GetHobby();
            if (id == null)
            {
                return View();
            }
            Employee emp = objemployee.GetEmployeeData(id);
            emp.AvailableHobbies = new MultiSelectList(objemployee.GetHobby(), "Id", "Hobby");
            var selectedHobbies = emp.SelectedHobbies;
            objemployee.GetHobby();
            emp.Id = Convert.ToInt32(id);

            if (emp == null)
            {
                return View();
            }
            return View(emp);
        }
        [HttpPost]
        public ActionResult Edit(int Id, [Bind]Employee emp, HttpPostedFileBase file)
        {
            EmployeeDataAccessLayer objemployee = new EmployeeDataAccessLayer();
            emp.AvailableHobbies = new MultiSelectList(objemployee.GetHobby(), "Id", "Hobby");
            var selectedHobbies = emp.SelectedHobbies;
            if (file != null)
            {
                string pic = Path.GetFileName(file.FileName);
                string path = Path.Combine(Server.MapPath("~/Upload/"), pic);
                // file is uploaded
                file.SaveAs(path);
                emp.Photo = "/Upload/" + pic;
                objemployee.UpdateEmployee(emp);
            }
            if (Id != emp.Id)
            {
                return View();
            }
            if (ModelState.IsValid)
            {
                objemployee.UpdateEmployee(emp);
                return RedirectToAction("Index");
            }
            return View(emp);
        }

Ниже приведен мой метод

public Employee GetEmployeeData(int? Id)
        {
            Employee emp = new Employee();
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                string sqlQuery = "SELECT * FROM  Login WHERE Id= " + Id;
                SqlCommand cmd = new SqlCommand(sqlQuery, con);

                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    emp.Id = Convert.ToInt32(rdr["Id"]);
                    emp.FirstName = rdr["FirstName"].ToString();
                    emp.LastName = rdr["LastName"].ToString();
                    emp.Gender = rdr["Gender"].ToString();
                    emp.DOB = Convert.ToDateTime(rdr["DOB"]).ToString("yyyy-MM-dd");
                    emp.Hobby =rdr["Hobby"].ToString();
                    emp.Photo = rdr["Photo"].ToString();
                    emp.City = rdr["City"].ToString();
                }
            }
            return emp;

Это мой вид редактирования

<div class="form-group">
            @Html.LabelFor(model => model.SelectedHobbies, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @foreach (var item in Model.AvailableHobbies)
                {
                    <div class="checkbox">
                        <label>
                            <input type="checkbox"
                                   name="SelectedHobbies"
                                   value="@item.Value"
                                   Text="@item.Text"
                                   @if (Model.SelectedHobbies.Contains(Int32.Parse(item.Value))) { <text> </text> } /> @item.Text
                            </label>
                        </div>
                    }
            </div>
            @Html.ValidationMessageFor(model => model.SelectedHobbies, "", new { @class = "text-danger" })

Как получить значение выбранного флажка?

...