Создание справочников. ServiceController

Создание справочников

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

Кроме модели User, которая имеет дело с пользователями, у нас есть ряд дополнительных моделей, которые играют некую вспомогательную роль, описывают некоторую дополнительную информацию. Например, модель Category описывает категорию проблемы, модель Department описывает отдел, в котором работает человек. Эти модели не являются центральными для системы, в отличие от классов User или Request, однако все равно нужны нам для описания полной информации об объектах.

Вся подобная информация будет организована в виде справочников, которые будет заполнять администратор и которые будут доступны только ему.

Начнем с создания справочника для отделов. Добавим в проект новый контроллер ServiceController. Удалим из него автоматически сгенерированный метод Index. Он нам не нужен. И добавим методы для управления отделами (то есть моделью Department):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Web;
using System.Web.Mvc;
using HelpDeskTrain.Models;

namespace HelpDeskTrain.Controllers
{
	[Authorize (Roles="Администратор")]
    public class ServiceController : Controller
    {
        HelpdeskContext db = new HelpdeskContext();
        
        [HttpGet]
        public ActionResult Departments()
        {
            ViewBag.Departments=db.Departments;
            return View();
        }

        //Добавление отдела с последующим их отображением
        [HttpPost]
        public ActionResult Departments(Department depo)
        {
            if (ModelState.IsValid)
            {
                db.Departments.Add(depo);
                db.SaveChanges();
            }
            ViewBag.Departments = db.Departments;
            return View(depo);
        }
        // Удаление отдела по id
        public ActionResult DeleteDepartment(int id)
        {
            Department depo = db.Departments.Find(id);
            db.Departments.Remove(depo);
            db.SaveChanges();
            return RedirectToAction("Departments");
        }
    }
}

Во-первых, так как данный контроллер будет виден только администратору, то мы используем атрибут [Authorize (Roles="Администратор")].

Поскольку в предполагаемой задаче нам надо на одном представлении и выводить все отделы, в то же время на этом же представлении должна быть форма для создания нового объекта Department, то у нас тут есть два способа. Первый способ заключается в типизации представления моделью IEnumerable<Department>, так как из контроллера в представление передаем список отделов в качестве модели, а из представления на контроллер мы тогда посылаем значение string для названия отдела и в контроллере проверяем корректность этого значения. Второй способ состоит в том, что мы типизируем представление моделью Department и ее передаем в post-метод для создания нового объекта, а сам список для вывода из контроллера в представление передаем через ViewBag. Воспользуемся вторым способом.

Здесь простые действия на просмотр списка отделов, их добавление и удаление. При желание можно еще добавить редактирование. Теперь добавим для действия Departments представление Departments.cshtml:

@model Department
@using HelpDeskTrain.Models
@{
    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>

        <p><input type="submit" value="Учесть" /></p>
    </fieldset>
}
<table>
@foreach (Department item in ViewBag.Departments)
{
    <tr>
        <td>@item.Id</td>
        <td>@item.Name</td>
        <td>@Html.ActionLink("Удалить", "DeleteDepartment", new { id=item.Id })</td>
    </tr>
}
</table>

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