Следующий код предназначен для создания пользователей. У меня есть класс пользователей, мне нужно создать здесь пользователей. Но у меня есть идентификатор отдела для человека, и этот идентификатор отдела относится к другой таблице в базе данных, имя которой - Department.
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>
Эта часть модели. Отдела - это то место, где я потерял. Мне нужно указать свой отдел в порядке списка, когда пользователь выбирает, я хочу выбрать идентификатор отдела. Нравится;
Итак, я хочу, чтобы пользователь увидел
Department Name + SubDepartment name
и когда они выбирают из списка, выбранная вещь
departmentid
так что я могу добавить это в базу данных.
Вот мой метод создания публикации:
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);
}
Это мой класс 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; }
}
@TetsuyaYamamoto Я не уверен, что выбрать для отображения, поэтому тоже задаю этот вопрос.





Напишите свой метод GET для Create следующим образом:
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>
Другая проблема в вашем методе CreatePOST. Вы не позволяете передавать DepartmentId в ваш список включения Bind. Обновите метод CreatePOST следующим образом:
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);
}
Почти правда, просто мы не публикуем выбранный нами идентификатор отдела в базе данных.
Пожалуйста, объясните проблему немного подробнее. Я исправлю!
Отредактировал ваш ответ как рабочую версию и добавил класс пользователя на мой вопрос. Все в порядке, за исключением того, что база данных не получила 1 значение в качестве отправления, когда я создаю пользователя и публикую значение.
Нет, извините, недоразумение произошло. По-прежнему публикация отъезда не работает. Отдых в порядке.
Не могли бы вы дать мне удаленный доступ, пожалуйста!
Я категорически не согласен с вашим использованием DropDownList, вместо этого используйте строго типизированную вспомогательную версию.
Когда я выбираю из раскрывающегося списка элемент 1, он должен опубликовать значение параметра depmentid до 1. Если я выберу пункт 2, он должен отправить отправление к значению 2 и т. д. И т. Д.
@TetsuyaYamamoto Вы понятия не имеете о SelectList. Не обращайте внимания, пожалуйста! Здесь мы делимся знаниями. Select-list за кулисами реализует SelectListItem. Буду признателен, если снимете, пожалуйста, отрицательный голос! Спасибо.
@Thatshowweroll Не могли бы вы добавить свой класс модели отдела в вопрос, пожалуйста!
@TanvirArjel я сделал
есть проблема! Обновляю свой ответ!
Когда вы сказали, я нашел, и ваш ответ тоже правильный. Спасибо
Приятно видеть, что ваша проблема решена! Добро пожаловать!
Это свойство
Departmentимеет типenumв классе viewmodel? Если вы хотите отображать составное текстовое значение, я думаю, вам следует попробоватьDropDownListFor.