Создание пользователей

Последнее обновление: 31.10.2015

За создание пользователей будет отвечать метод 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")
}

Опять же можем протестировать и создать какого-либо пользователя:


Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850