Не удается получить значение DropdownList в модели, используя mvc & ado.net - PullRequest
0 голосов
/ 24 мая 2018

Я отправляю выбранный список для просмотра с помощью ViewBag.Вот метод get, который я передаю через ViewBag

public List<Dept> GetDept()
 {
    connection();
    List<Dept> deptList = new List<Dept>();

    SqlCommand com = new SqlCommand("Sp_GetDept", con);
    com.CommandType = CommandType.StoredProcedure;
    SqlDataAdapter da = new SqlDataAdapter(com);
    DataTable dt = new DataTable();

    con.Open();
    da.Fill(dt);
    con.Close();
    //Bind EmpModel generic list using dataRow     
    foreach (DataRow dr in dt.Rows)
    {
        deptList.Add(
            new Dept
            {
                DeptId = Convert.ToInt32(dr["DeptId"]),
                Name = Convert.ToString(dr["Name"])
            }
       );
    }
    return deptList;
}

public ActionResult Create()
{
    DeptRepo repo = new DeptRepo();
    ViewBag.Dept = new SelectList(repo.GetDept(), "DeptId", "Name");
    return View();
}

View Code:

<div class="form-group">
    @Html.LabelFor(model => model.Dept, "Department", htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownList("Dept", null, "--Select--", htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.Dept, "", new { @class = "text-danger" })
    </div>
</div>

Модель студента:

public class Student
{
    public int StudentId { get; set; }

    public string Name { get; set; }

    public string Roll { get; set; }

    public int DeptId { get; set; }

    public virtual Dept Dept { get; set; }
}

postmethod:

[HttpPost]
    public ActionResult Create(Student std)
    {
        try
        {
            if (ModelState.IsValid)
            {
                StudentRepo repo = new StudentRepo();

                repo.AddStudent(std);
            }

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

В идентификаторе раскрывающегося списка метода post значение id найдено нулевым в объекте студента.Кто-нибудь может сказать мне, как я могу получить Id иностранного ключа, используя mvc и ado.net.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 мая 2018

Ваш текущий код,

@Html.DropDownList("Dept", null, "--Select--", 
                                 htmlAttributes: new { @class = "form-control" })

сгенерирует разметку HTML для элемента SELECT со значением атрибута имени, установленным в Dept

<select class="form-control" id="Dept" name="Dept">
   <option value="">--Select--</option>
</select>

Поскольку вы используете Studentclass в качестве параметра метода действия httppost, для привязки модели для правильного сопоставления выбранного значения параметра со DeptId свойством объекта Student необходимо убедиться, что имя выбранного элемента также также DeptId

Есливаше представление строго типизировано до класса Student, вы можете использовать DropDownListFor вспомогательный метод

@Html.DropDownListFor(a => a.DeptId, ViewBag.Dept as IEnumerable<SelectListItem>, 
                           "--Select--", htmlAttributes: new { @class = "form-control" })

или

Вы можете использовать DropDownList метод иукажите DeptId в качестве первого параметра (имя элемента управления) и явно укажите коллекцию, которая будет использоваться для построения параметров в качестве второго параметра.

@Html.DropDownList("DeptId", ViewBag.Dept as IEnumerable<SelectListItem>, 
                    "--Select--", htmlAttributes: new { @class = "form-control" })

Это отобразит элемент SELECT с установленным значением атрибута nameна DeptId, и когда форма отправлена, связыватель модели сможет использовать выбранное значение параметра, чтобы установить для него свойство DeptId объекта Student (который является параметром метода действия httppost)г)

...