Заполнение DropDownList в ASP.NET MVC - PullRequest
0 голосов
/ 17 декабря 2018

Следующий код для создания пользователей.У меня есть пользовательский класс, мне нужно создать пользователей здесь.Но у меня есть идентификаторы отделов, и этот идентификатор относится к другой таблице в базе данных, имя которой - Отдел.

public ActionResult Create()
{
    // disable lazy because of error it creates
    _db.Configuration.LazyLoadingEnabled = false;
    var data = _db.Departments.OrderBy(a => a.DepartmentId).ToList();
    ViewData["DepartmentList"] = data;

    return View();
}

Вот вид:

@{
    var departmentLists = ViewData["DepartmentList"]; // Cast the list
}

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

Эта часть модели.департамента - это то место, где я проиграл.Мне нужно перечислить мой отдел в порядке списка, когда пользователь выбирает, я хочу выбрать идентификатор отдела.Как это;

enter image description here

Поэтому я хочу, чтобы пользователь увидел

Название отдела + Название подразделения

и когда они выбирают из списка, выбирается

департамент

, поэтому я могу добавить в базу данных вот так.

Вотмой метод создания сообщения:

public ActionResult Create([Bind(Include = "ID,LastName,FirstMidName,EnrollmentDate,Email,Department,Position,Active")] User user)
{
    if (ModelState.IsValid)
    {
        _db.Users.Add(user);
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

     return View(user);
 }

Это мой класс пользователя;

public class User
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int DepartmentId { get; set; }

    // Other fields removed for brevity
}

Вот класс Department;

public class Department
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DepartmentId { get; set; }

    public string DepartmentName { get; set; }

    public string SubDepartmentName { get; set; }
}

1 Ответ

0 голосов
/ 17 декабря 2018

Напишите ваш метод Create GET следующим образом:

public ActionResult Create()
{
    // disable lazy because of error it creates
    _db.Configuration.LazyLoadingEnabled = false;

    var departmentList = _db.Departments.Select(d => new
     {
        d.DepartmentId,
        DepartmentName = d.DepartmentName + " " + d.SubDepartmentName
     }).OrderBy(a => a.DepartmentId).ToList();

    ViewBag.DepartmentList = new SelectList(departmentList,"DepartmentId","DepartmentName");

    return View();
}

Затем в представлении:

<div class="form-group">
        @Html.LabelFor(model => model.DepartmentId, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("DepartmentId", ViewBag.DepartmentList as SelectList, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.DepartmentId, "", new { @class = "text-danger" })
        </div>
    </div>

Другая проблема заключается в вашем методе Create POST.Вы не позволяете DepartmentId передать свой список включения Bind.Пожалуйста, обновите ваш Create POST метод следующим образом:

public ActionResult Create([Bind(Include = "ID,LastName,FirstMidName,EnrollmentDate,Email,DepartmentId,Position,Active")] User user)
{
    if (ModelState.IsValid)
    {
       _db.Users.Add(user);
       _db.SaveChanges();
       return RedirectToAction("Index");
    }

    return View(user);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...