Как осуществить регистрацию клиентской модели взаимодействия?



Класс IdentityUser определяет множество свойств, однако нам необязательно всех их устанавливать. И в данном случае для создания пользователей нам лучше воспользоваться связующей моделью, которая установит все необходимые свойства. Итак, добавим в папку Models класс, который будет представлять пользователя:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System; using System.ComponentModel.DataAnnotations;   namespace AspNetIdentityApp.Models { public class RegisterModel { [Required] public string Email { get; set; }   [Required] public int Year { get; set; }   [Required] [DataType(DataType.Password)] public string Password { get; set; }   [Required] [Compare("Password", ErrorMessage = "Пароли не совпадают")] [DataType(DataType.Password)] public string PasswordConfirm { get; set; } } }

namespace AspNetIdentityApp.Controllers

{

public class AccountController : Controller

{

private ApplicationUserManager UserManager

{

get

{

return HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

}

}

 

public ActionResult Register()

{

return View();

}

 

[HttpPost]

public async Task<ActionResult> Register(RegisterModel model)

{

if (ModelState.IsValid)

{

ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email, Year = model.Year };

IdentityResult result = await UserManager.CreateAsync(user, model.Password);

if (result.Succeeded)

{

return RedirectToAction("Login", "Account");

}

else

{

foreach (string error in result.Errors)

{

ModelState.AddModelError("", error);

}

}

}

return View(model);

}

}

}

Первым делом в контроллере создается свойство UserManager, возвращающее объект ApplicationUserManager. Через него мы будем взаимодействовать с хранилищем пользователей. Для получения хранилища применяется выражение HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>()

Для собственно регистрации определен метод Register в Get- и Post-версиях. Post-версия представляет асинхронный метод, поскольку для создания пользователя здесь используется асинхронный вызов UserManager.CreateAsync(). Этот метод возвращает объект IdentityResult.

Если создание пользователя прошло успешно, то его свойство Succeeded будет равно true.

И в конце создадим представление для регистрации Register.cshtml

Какие основные проблемы модели валидации MVC-приложения Вы знаете?

public class Book

{

[HiddenInput(DisplayValue = false)]

public int Id { get; set; }

[Required]

[Display(Name = "Название")]

public string Name { get; set; }

[Required]

[Display(Name = "Автор")]

public string Author { get; set; }

[Required]

[Display(Name = "Год")]

public int Year { get; set; }}

Бұл модельдің алдыңғы нұсқасымен салыстырғанда, Міндетті төлсипатты қосыңыз. Енді осы үлгідегі нысандарды басқаратын контроллерді жасаңыз. Үлгі ретінде контроллерді (контроллерді BookController деп атайық) жасайық, Entity Framework көмегімен MVC 5 контроллерін таңдап, біздің үлгі класс ретінде, біздің Кітап үлгісін және деректер контексті = BookContext ретінде көрсетеміз:

Нәтижесінде, әдепкі бойынша, біз модель нысандарын басқару үшін көріністер жинағын жасаймыз. Қолданбаны іске қосыңыз және дерекқорға жаңа жазба қосатын контроллердің жасау әрекетін жасаңыз (Book / Create Request). Өрістерді толтырмастан, біз нысанды жіберу түймешігін бірден шертуімізге болады:Бұл жағдайда әдепкі бойынша mvc-де пайдаланылатын тексеру механизмін қолдандық. Бұл жағдайда валидацияның негізгі ұстанымдары қандай?

Үлгіні жариялау кезінде жарамдылық төлсипаттарын пайдаланыңыз. Әрбір сипатқа арналған Міндетті төлсипатты анықтадық, сондықтан бұл сипатта белгілі бір мән болуы керек екенін біледі.

Көмекшілерді тексеруді қолдану. Әрбір қасиет үшін Html.ValidationMessageFor растау көмекшісін қолданамыз:<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>

Осыған байланысты қате туралы хабар көрсетіледі.

Клиенттік беттегі дисплей стилін теңшеу үшін Site.css файлы тиісті сыныптарға арналған әдепкі мәнді анықтайды:

/* styles for validation helpers */

.field-validation-error {

color: #b94a48;

}

.field-validation-valid {

display: none;

}

input.input-validation-error {

border: 1px solid #b94a48;

}

 

input[type="checkbox"].input-validation-error {

border: 0 none;

}

 

.validation-summary-errors {

color: #b94a48;

}

 

.validation-summary-valid {

display: none;

Сервер тарапынан тексеру. Бұл клиенттің тарапынан тексеру болды. Алайда, сіздің браузеріңізде javascript өшірілген болса, онда сіз қателесіп bukovok көресіз және нысаны қауіпсіз серверге барады. Бірақ, сонымен қатар, сервер жағында да растау бар:

public ActionResult Create([Bind(Include="Id,Name,Author,Year")] Book book)

{if (ModelState.IsValid)

{

   db.Books.Add(book);

   db.SaveChanges();

   return RedirectToAction("Index");

} return View(book);

}

ModelState.IsValid сипатын пайдалану арқылы, біз модельдің тексеруді өткізген-бермейтінін білеміз және нәтижеге байланысты белгілі бір әрекеттерді орындаймыз.


Дата добавления: 2018-02-15; просмотров: 485; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!