public AccountViewModel(User item)
        {
            Item = item;
            if (item is Student)
            {
                ItemStudent = item as Student;

                TestData = "Date";
                var tests = ItemStudent.TestSessions.GroupBy(i => i.Test.Id).Select(j => j.FirstOrDefault().Test).ToArray();
                foreach (var test in tests)
                    TestData += "," + test.Title;
                TestData += "\\n";

                var cntr = 1;
                foreach (var sessions in ItemStudent.TestSessions)
                {
                    TestData += cntr++;
                    for (int i = 0; i < tests.Count(); i++)
                    {
                        var strBuild = ",";

                        if (sessions.Test.Id == tests[i].Id)
                            strBuild += Convert.ToInt16(sessions.Percent * 100).ToString();
                        
                        TestData += strBuild;
                    }
                    TestData += "\\n";
                }
            }
        }
        //
        // GET: /Admin/User/Edit
        public ActionResult Edit(int? id)
        {
            User item = null;

            try
            {
                if (id.HasValue)
                {
                    item = db.Users.SingleOrDefault(i => i.Id == id);
                    if (item == null)
                        throw new ArgumentException("Пользователь не найден.");
                }
                else
                {
                    item = new User();
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
            }
            return View(new UserViewModel(db, item));
        }
        public ActionResult EditPost(int? id)
        {
            User user = null;

            try
            {
                if (id.HasValue)
                {
                    user = db.Users.SingleOrDefault(i => i.Id == id);
                    if (user == null)
                        throw new ArgumentException("Пользователь не найден.");
                }
                else
                {
                    user = new User();
                    TryUpdateModel(user, "Item", new[] { "UserRole" });

                    if (user.UserRole == AccountStatus.Admin)
                        user = new Administrator();
                    if (user.UserRole == AccountStatus.Student)
                        user = new Student();
                    if (user.UserRole == AccountStatus.Teacher)
                        user = new Teacher();

                    TryUpdateModel(user as User, "Item", new[] { "Password", "UserRole" });
                }

                TryUpdateModel(user as User, "Item", new[] { "Login", "Name" });
                if (user.UserRole == AccountStatus.Admin)
                    TryUpdateModel(user as Administrator, new[] { "Telephone", "Email" });
                if (user.UserRole == AccountStatus.Student)
                    TryUpdateModel(user as Student, new[] { "Age", "Group", "Course" });
                if (user.UserRole == AccountStatus.Teacher)
                    TryUpdateModel(user as Teacher, new[] { "University", "Department" });

#warning Да простит меня Родионов за ЭТО...
                if (true)//ModelState.IsValid)
                {
                    if (id == null)
                    {
                        if (db.Users.Count(i => i.Login == user.Login) > 0)
                            throw new ArgumentException("Пользователь с таким e-mail уже существует.");

                        if (user.UserRole == AccountStatus.Admin)
                            db.Administrators.Add(user as Administrator);
                        if (user.UserRole == AccountStatus.Student)
                            db.Students.Add(user as Student);
                        if (user.UserRole == AccountStatus.Teacher)
                            db.Teachers.Add(user as Teacher);
                    }
                    else
                    {
                        if (user.UserRole == AccountStatus.Admin)
                            db.Entry<Administrator>(user as Administrator).State = EntityState.Modified;
                        if (user.UserRole == AccountStatus.Student)
                            db.Entry<Student>(user as Student).State = EntityState.Modified;
                        if (user.UserRole == AccountStatus.Teacher)
                            db.Entry<Teacher>(user as Teacher).State = EntityState.Modified;
                    }

                    db.SaveChanges();
                    return RedirectToAction("Index");
                }

            }
            catch (Exception ex)
            {
#warning И за это пусть он меня простит...
                ModelState.Clear();
                ModelState.AddModelError(string.Empty, ex.Message);
            }

            return View(new UserViewModel(db, user));
        }
 public UserViewModel(DataContext db, User item) : this(db)
 {
     Item = item;
 }
 // Добавляет метод по заданию информации об авторизованном пользователе
 public static void Authorize(this HttpSessionState session, User user)
 {
     session["User"] = user;
 }