Делаю регистрацию на сайте в учебных целях. Хочу запретить создавать пользователей с одинаковым логином. Проверку на одинаковый логин делаю в реализации интерфейса. Вот код:
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();
}
То есть если пользователя с таким логином нет, то я регистрирую его. Если же пользователь с таким логином есть, то выпихиваю ошибку(И вот эту ошибку я хочу изменить на что то более красивое. Например: на сообщение "Пользователь с таким логином уже есть").
Посидел. Подумал. И решил, что лучше перенести логику проверки в контроллер:
[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");
}
Можно ли как то это все упростить, а то мне кажется, что данный контроллер получился уж слишком большим...
Почему делаете в методе, а не в ActionResult ? Можно использовать remote Validation - http://www.c-sharpcorner.com/UploadFile/d87001/remote-validation-in-mvc/
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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здравствуйте! Такая проблемаХочу вывести таблицу результатов примитивного вида: Ниже мой недописанный код
Приветствую! Клепаю 2D игрушку на небезызвестном двигателе Unity3DВозник вопрос сразу же после отрисовки первого уровня
Я пишу на C# программу, которая с помощью библиотеки log4net ведет лог в отдельный файлКогда лог-файл переполняется, он должен быть удален
Мне нужен ComboBox с постоянным элементом "Не выбрано", который означает, что SelectedValue равно null