Регистрация на сайте с помощью ASP.NET MVC C#

417
28 февраля 2017, 14:36

Делаю регистрацию на сайте в учебных целях. Хочу запретить создавать пользователей с одинаковым логином. Проверку на одинаковый логин делаю в реализации интерфейса. Вот код:

public void Add_New_User(User user)
{
    User olduser = context.Users.FirstOrDefault(c=>c.LoginUser == user.LoginUser);
    if (olduser == null)
    {
        context.Users.Add(user);
    }
    else
    {
         throw new Exception();
    }
    context.SaveChanges();
}

То есть если пользователя с таким логином нет, то я регистрирую его. Если же пользователь с таким логином есть, то выпихиваю ошибку(И вот эту ошибку я хочу изменить на что то более красивое. Например: на сообщение "Пользователь с таким логином уже есть").

Answer 1

Посидел. Подумал. И решил, что лучше перенести логику проверки в контроллер:

[HttpPost]
        public ActionResult Registr(User user, HttpPostedFileBase image)
        {
            if (image != null)
            {
                user.IconUserType = image.ContentType;
                user.IconUserData = new byte[image.ContentLength];
                image.InputStream.Read(user.IconUserData, 0, image.ContentLength);
            }
            User olduser = repository.Users.FirstOrDefault(u => u.LoginUser == user.LoginUser);
            if (olduser != null)
            {
                ModelState.AddModelError("", "Такой пользователь уже есть");
            }
            if (user.Password == Request.Form["Повторите пароль"] && ModelState.IsValid)
            {
                TempData["Message"] = "Регистрация прошла успешно! Можете логиниться";
                repository.Add_New_User(user);
                return Redirect("/Account/Login"); //С помошью такого перевода мы избегам ошибки, когда при перегрузке браузера мы два раза отправляем одни и теже данные
            }
            else if(user.Password != Request.Form["Повторите пароль"])
            {
                ModelState.AddModelError("", "Пароли не совпадают");
            }
           return View("Registr");
        }

Можно ли как то это все упростить, а то мне кажется, что данный контроллер получился уж слишком большим...

Answer 2

Почему делаете в методе, а не в ActionResult ? Можно использовать remote Validation - http://www.c-sharpcorner.com/UploadFile/d87001/remote-validation-in-mvc/

Answer 3
Public Class RegisterViewModel
    <Required(ErrorMessage:="Не указан логин")>
    <Display(Name:="Логин")>
    <RegularExpression("[A-z0-9_]{5,15}", ErrorMessage:="Допустимые символы - латиница, нижнее подчеркивание, цифры (5-15 символов)")>
    Public Property Login As String ' имя пользователя (логин) проверка на уникальность
End Class

проверка

If olduser IsNot Nothing Then
ModelState.AddModelError("", "Пользователь с таким логином уже существует")
End If
READ ALSO
Вывод таблицы результатов мини-игры в текстовый файл

Вывод таблицы результатов мини-игры в текстовый файл

Здравствуйте! Такая проблемаХочу вывести таблицу результатов примитивного вида: Ниже мой недописанный код

372
Спрайты, Тайтлы и их разрешение в Unity 3d

Спрайты, Тайтлы и их разрешение в Unity 3d

Приветствую! Клепаю 2D игрушку на небезызвестном двигателе Unity3DВозник вопрос сразу же после отрисовки первого уровня

327
Как удалить используемый файл

Как удалить используемый файл

Я пишу на C# программу, которая с помощью библиотеки log4net ведет лог в отдельный файлКогда лог-файл переполняется, он должен быть удален

238
ComboBox с элементом &ldquo;Не выбрано&rdquo;

ComboBox с элементом “Не выбрано”

Мне нужен ComboBox с постоянным элементом "Не выбрано", который означает, что SelectedValue равно null

373