За создание пользователей будет отвечать метод Create. Итак, добавим в контроллер следующий метод:
[HttpGet] [Authorize(Roles = "Администратор")] public ActionResult Create() { SelectList departments = new SelectList(db.Departments, "Id", "Name"); ViewBag.Departments = departments; SelectList roles = new SelectList(db.Roles, "Id", "Name"); ViewBag.Roles = roles; return View(); } [HttpPost] [Authorize(Roles = "Администратор")] public ActionResult Create(User user) { if (ModelState.IsValid) { db.Users.Add(user); db.SaveChanges(); return RedirectToAction("Index"); } SelectList departments = new SelectList(db.Departments, "Id", "Name"); ViewBag.Departments = departments; SelectList roles = new SelectList(db.Roles, "Id", "Name"); ViewBag.Roles = roles; return View(user); }
Поскольку создание пользователей - прерогатива администратора, то устанавливаем соответствующее ограничение по доступу. При создании пользователя
администратор будет выбирать для них роль и департамент. Но поскольку эти данные сами по себе не появятся в представлении, мы их передаем
в него через объекты типа SelectList. Конструктор этого объекта в качестве первого параметра принимает исходный набор, вторым параметром идет
значение, а третьим отображаемая метка для данного значения (например, SelectList roles = new SelectList(db.Roles, "Id", "Name");
). То есть в списке мы будем видеть
значения свойств Name, но при выборе фактически будут выбираться значения свойств Id.
Ну и при удачном создании нового пользователя администратор будет перенаправляться на страницу со списком всех пользователей:
RedirectToAction("Index")
Создадим представление Create.cshtml для этого метода:
@model HelpDeskTrain.Models.User @{ ViewBag.Title = "Создание пользователя"; } <h2>Создание нового пользователя</h2> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Новый пользователь</legend> <div class="editor-label"> @Html.LabelFor(model => model.Name) </div> <div class="editor-field"> @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div> <div class="editor-label"> @Html.LabelFor(model => model.Login) </div> <div class="editor-field"> @Html.EditorFor(model => model.Login) @Html.ValidationMessageFor(model => model.Login) </div> <div class="editor-label"> @Html.LabelFor(model => model.Password) </div> <div class="editor-field"> @Html.EditorFor(model => model.Password) @Html.ValidationMessageFor(model => model.Password) </div> <div class="editor-label"> @Html.LabelFor(model => model.Position) </div> <div class="editor-field"> @Html.EditorFor(model => model.Position) @Html.ValidationMessageFor(model => model.Position) </div> <div class="editor-label"> @Html.LabelFor(model => model.DepartmentId) </div> <div class="editor-field"> @Html.DropDownListFor(model => model.DepartmentId, ViewBag.Departments as SelectList) @Html.ValidationMessageFor(model => model.DepartmentId) </div> <div class="editor-label"> @Html.LabelFor(model => model.RoleId) </div> <div class="editor-field"> @Html.DropDownListFor(model => model.RoleId, ViewBag.Roles as SelectList) @Html.ValidationMessageFor(model => model.RoleId) </div> <p> <input type="submit" value="Добавить" /> </p> </fieldset> } @section Scripts { @Scripts.Render("~/bundles/jqueryval") }
Опять же можем протестировать и создать какого-либо пользователя: