{"id":296554,"date":"2019-12-28T21:00:13","date_gmt":"2019-12-28T21:00:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=296554"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=296554","title":{"rendered":"ASP.NET MVC \u2013 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 MySQL \u0447\u0435\u0440\u0435\u0437 ADO.NET"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/482346\/\">\u0423\u0436\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0440\u0430\u0437\u0430 \u0442\u0440\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043a ASP.NET MVC. \u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u0441 ASP.NET WebForms \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 MVC, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 \u044d\u0442\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043e\u0431\u0449\u0435\u0433\u043e \u2013 \u044d\u0442\u043e \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Framework. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0443\u0442 \u2013 \u043b\u0443\u0447\u0448\u0435 \u0438\u043b\u0438 \u0445\u0443\u0436\u0435 MVC \u0447\u0435\u043c WebForms, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043d\u0438 \u043e\u0431\u0435 \u0445\u043e\u0440\u043e\u0448\u0438, \u0438 \u043d\u0430 \u043e\u0431\u0435\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u0432\u043e\u0438 \u043c\u044b\u0441\u043b\u0438 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 TDD \u044f \u0442\u043e\u0436\u0435 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043f\u0440\u0438 \u0441\u0435\u0431\u0435, \u0445\u043e\u0442\u044f \u0438\u0445 \u0435\u0441\u0442\u044c \u0443 \u043c\u0435\u043d\u044f.<\/p>\n<p>  \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0435\u0439\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u2013 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438: \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CRUD). \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u043d\u0438\u0433\u0430\u0445 \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0434\u043b\u044f ASP.NET MVC \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 ORM (Object Relation Mapping): \u0438\u043b\u0438 Entity Framework (EF) \u0438\u043b\u0438 LINQ \u0434\u043b\u044f SQL. \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435, \u0441\u043f\u043e\u0440\u0443 \u043d\u0435\u0442, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u2013 \u0430 \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0421\u0423\u0411\u0414 (\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f) \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0434\u0430\u0436\u0435 SQL, \u043f\u043e \u0438\u0434\u0435\u0435, \u0437\u043d\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0430 \u0432 \u0432\u0438\u0434\u0435 EF \u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0421\u0423\u0411\u0414 \u0440\u0430\u0437\u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u00ab\u0412\u043e\u0442 \u043e\u043d\u043e \u0441\u0447\u0430\u0441\u0442\u044c\u0435 \u2013 \u043d\u0435\u0442 \u0435\u0433\u043e \u043a\u0440\u0430\u0448\u0435\u00bb. \u041d\u043e \u0442\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0431\u043e\u044f\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c ADO.NET, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u2013 \u0430 \u0441 \u0447\u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432 ASP.NET MVC \u0438 \u043d\u0430\u0434\u043e \u043b\u0438.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u043b\u044e\u0441 \u043a \u044d\u0442\u043e\u043c\u0443, \u0443 \u043c\u0435\u043d\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0432\u044b\u0437\u0432\u0430\u043b\u043e \u0434\u0438\u043a\u0443\u044e \u043b\u043e\u043c\u043a\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435-\u0433\u0440\u0438\u0434\u0435. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u043b\u0438 \u0431\u0440\u0430\u0442\u044c \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435. \u0415\u0441\u043b\u0438 \u0432\u0430\u0441, \u043a\u0430\u043a \u0438 \u043c\u0435\u043d\u044f, \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 GridView \u0432 ASP.NET WebForms \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c, \u0442\u043e \u0434\u043b\u044f MVC \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0435, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e Grid.mvc. \u041d\u043e \u0432\u043e\u0442 \u0434\u043e\u0432\u0435\u0440\u0438\u044f \u0443 \u043c\u0435\u043d\u044f \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u043b\u043e\u0432\u0430\u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 (\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043b\u0438?), \u0430, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0435\u0433\u043e \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043f\u0438\u043b\u0438\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e, \u043d\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c, \u043c\u044b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u043e\u043f\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043b\u043e\u043f\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u043b\u0438\u0431\u043e \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0410 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u2013 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u0414\u0430\u0436\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 MySQL \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0445\u043e\u0442\u044f \u0435\u0433\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043a\u0440\u0443\u043f\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0430 \u0447\u0442\u043e \u0442\u0430\u043c \u0441 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u00ab\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430\u043c\u0438\u00bb \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Nuget?<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434 ASP.NET MVC, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0421\u0423\u0411\u0414 MySQL. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0432\u043e\u0442 \u043f\u043e <a href=\"https:\/\/yadi.sk\/d\/EArrZdGh_iVaJg\">\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443<\/a>, \u043d\u0438\u0436\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u043e\u0432\u0430\u043d \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438. \u0410 <a href=\"https:\/\/example-mvc.azurewebsites.net\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 MySQL<\/h2>\n<p>  <\/p>\n<pre><code class=\"sql\">CREATE SCHEMA `example`; USE `example`; CREATE TABLE `users` (   `UserID` int(4) unsigned NOT NULL AUTO_INCREMENT,   `SupporterTier` enum('None','Silver','Gold','Platinum') NOT NULL DEFAULT 'None',   `Loginname` varchar(255) NOT NULL,   `LanguageID` int(4) unsigned NOT NULL DEFAULT '2',   `Email` varchar(255) DEFAULT NULL,   `LastLoginDate` datetime DEFAULT NULL,   PRIMARY KEY (`UserID`),   KEY `i_Loginname` (`Loginname`),   KEY `i_Language_idx` (`LanguageID`),   CONSTRAINT `i_Language` FOREIGN KEY (`LanguageID`) REFERENCES `languages` (`LanguageID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE `languages` (   `LanguageID` int(4) unsigned NOT NULL AUTO_INCREMENT,   `LanguageName` varchar(50) NOT NULL DEFAULT '',   `Culture` varchar(10) DEFAULT NULL,   PRIMARY KEY (`LanguageID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;<\/code><\/pre>\n<p>  \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0411\u0414) \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0443\u043c\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u0441\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e \u00ab\u043e\u0434\u0438\u043d-\u043a\u043e-\u043c\u043d\u043e\u0433\u0438\u043c\u00bb \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043f\u043e \u043f\u043e\u043b\u044e <code>LanguageID<\/code>. \u042d\u0442\u0438\u043c \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u044f\u0437\u044b\u043a\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0422\u0430\u043a\u0436\u0435, \u0434\u043b\u044f \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f, \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u0432\u0435\u0434\u0451\u043c \u0435\u0449\u0435 \u043f\u043e\u043b\u0435 <code>SupporterTier<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f (enum). \u0410 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043f\u043e\u043b\u0435 <code>LastLoginDate<\/code> \u0442\u0438\u043f\u0430 \u00ab\u0434\u0430\u0442\u0430\/\u0432\u0440\u0435\u043c\u044f\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e).<\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442<\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sm\/4a\/07\/sm4a07w8etetdgvtnkhd5i-wjcu.png\"><\/p>\n<p>  \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u00abMVC\u00bb. \u041c\u043e\u0436\u043d\u043e \u0438 \u00ab\u041f\u0443\u0441\u0442\u043e\u0439\u00bb, \u043d\u043e \u0443 \u043d\u0430\u0441 \u0443\u0447\u0435\u0431\u043d\u043e\u0435, \u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u0440\u0430\u0437\u0443, \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Bootstrap \u0438 JQuery.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lg\/yv\/rn\/lgyvrneaxmudgq9mx1ijk36jjqs.png\"><\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0436\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438 <i>Content<\/i>, <i>Fonts<\/i>, <i>Scripts<\/i>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0430\u0439\u043b\u044b <i>BundleConfig.cs<\/i> \u0438 <i>FilterConfig.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>App_Start<\/i> \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0441\u0432\u044f\u0437\u043e\u043a \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 ASP.NET MVC. \u0412 \u043f\u0443\u0441\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0432 \u0444\u0430\u0439\u043b\u0435 <i>RouteConfig.cs<\/i>. \u0412 <i>Global.asax.cs<\/i> \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445:<\/p>\n<pre><code class=\"cpp\">FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles);<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0432\u0441\u044e \u043e\u0431\u0432\u044f\u0437\u043a\u0443<\/h2>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0421\u0423\u0411\u0414 MySQL \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <i>MySql.Data<\/i>: \u043b\u0438\u0431\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440 <b>mysql-connector-net-8.0.18<\/b> \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043b\u0438\u0431\u043e \u0438\u0437 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Nuget:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/mk\/b_\/fh\/mkb_fhxg6d8kx2pdnrithceoaf4.png\"><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0444\u0430\u0439\u043b <i>Web.config<\/i> \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0421\u0423\u0411\u0414 MySQL:<\/p>\n<pre><code class=\"cpp\">&lt;connectionStrings&gt;   &lt;add name=\"example\" providerName=\"MySql.Data.MySqlClient\" connectionString=\"server=localhost;Port=3306;user id=develop;Password=develop;persistsecurityinfo=True;database=example;CharSet=utf8;SslMode=none\" \/&gt; &lt;\/connectionStrings&gt;<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b <code>&lt;appSettings&gt;<\/code> \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: <code>&lt;add key=\"ConnectionString\" value=\"example\" \/&gt;<\/code><br \/>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>Domain<\/i>, \u0432 \u043d\u0451\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 <code>Base<\/code> (\u0432 \u0444\u0430\u0439\u043b\u0435 <i>Base.cs<\/i>), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u044d\u0442\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c:<\/p>\n<pre><code class=\"cpp\">public static class Base {     private static string ConnectionString     {         get         { return System.Configuration.ConfigurationManager.AppSettings[\"ConnectionString\"]; }     }       public static string strConnect     {         get         { return System.Configuration.ConfigurationManager.ConnectionStrings[ConnectionString].ConnectionString; }     } }<\/code><\/pre>\n<p>  \u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u0430\u043a\u0438\u043c\u0438-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0421\u0423\u0411\u0414: \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 Microsoft Azure \u2013 \u0442\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438, \u0438 \u0432 \u043d\u0451\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 <code>&lt;connectionStrings&gt;<\/code>. \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0444\u0430\u0439\u043b\u0430 <i>web.config<\/i>.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/rc\/8u\/qz\/rc8uqzdrz9hvnd-y7swirgoh4tm.png\"><\/p>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435-\u043c\u0430\u043a\u0435\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <i>_Layout.cshtml<\/i> (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Views\\Shared<\/i> \u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430) \u043c\u043e\u0436\u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u0441\u043c. \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Example_Users.Properties.Resources.Title<\/code>):<\/p>\n<pre><code class=\"xml\">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\"\/&gt;    &lt;meta charset=\"utf-8\" \/&gt;    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;    &lt;title&gt;@ViewBag.Title \u2013 @Example_Users.Properties.Resources.Title&lt;\/title&gt;    @Styles.Render(\"~\/Content\/css\")    @Scripts.Render(\"~\/bundles\/modernizr\") &lt;\/head&gt; &lt;body&gt;    &lt;div class=\"container body-content\"&gt;        &lt;h1 class=\"page-header\"&gt;&lt;a href=\"\/\"&gt;@Example_Users.Properties.Resources.Title&lt;\/a&gt;&lt;\/h1&gt;        @RenderBody()        &lt;hr \/&gt;        &lt;footer&gt;            &lt;p&gt; @DateTime.Now.Year \u2013 @Example_Users.Properties.Resources.Author&lt;\/p&gt;        &lt;\/footer&gt;    &lt;\/div&gt;    @Scripts.Render(\"~\/bundles\/jquery\")    @Scripts.Render(\"~\/bundles\/bootstrap\")    @RenderSection(\"scripts\", required: false) &lt;\/body&gt; &lt;\/html&gt;<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0438\u043b\u0435\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e Bootstrap \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 JQuery. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>RenderBody()<\/code>.<\/p>\n<h2>M \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0434\u0435\u043b\u044c<\/h2>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0430\u0439\u043b <i>UserClass.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>Domain<\/i>:<\/p>\n<pre><code class=\"cpp\">[DisplayName(\"User\")] public class UserClass {     [Key]     [HiddenInput(DisplayValue=false)]     public int UserID { get; set; }       [Required(ErrorMessage=\"Please enter a login name\")]     [Display(Name = \"Login\")]     public string Loginname { get; set; }       public virtual LanguageClass Language { get; set; }       [EmailAddress(ErrorMessage = \"Please enter a valid email\")]     public string Email { get; set; }       [UIHint(\"Enum\")]     [EnumDataType(typeof(Supporter))]     [Required(ErrorMessage = \"Please select supporter tier\")]     [Display(Name = \"Supporter\")]     public Supporter SupporterTier { get; set; }       [HiddenInput(DisplayValue = true)]     [ScaffoldColumn(false)]     [Display(Name = \"Last login\")]     public DateTime? LastLoginDate { get; set; }       [HiddenInput(DisplayValue = false)]     public bool IsLastLogin     {         get { return LastLoginDate != null &amp;&amp; LastLoginDate &gt; DateTime.MinValue; }     }       public UserClass() {}       public UserClass(int UserID, string Loginname, LanguageClass Language, string Email, DateTime? LastLoginDate, Supporter SupporterTier)     {         this.UserID = UserID;         this.Loginname = Loginname;         this.Language = Language;         this.Email = Email;         this.LastLoginDate = LastLoginDate;         this.SupporterTier = SupporterTier;     } }   public enum Supporter {     [Display(Name=\"\")]     None = 1,     Silver = 2,     Gold = 3,     Platinum = 4 }<\/code><\/pre>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0444\u0430\u0439\u043b <i>LanguageClass.cs<\/i> \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433:  <\/p>\n<pre><code class=\"cpp\">[DisplayName(\"Language\")] public class LanguageClass {     [Key]     [HiddenInput(DisplayValue = false)]     [Required(ErrorMessage = \"Please select a language\")]     [Range(1, int.MaxValue, ErrorMessage = \"Please select a language\")]     public int LanguageID { get; set; }       [Display(Name = \"Language\")]     public string LanguageName { get; set; }       public LanguageClass() {}       public LanguageClass(int LanguageID, string LanguageName)     {         this.LanguageID = LanguageID;         this.LanguageName = LanguageName;     } }<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Users<\/code> \u0438 <code>Languages<\/code> \u0432 \u0421\u0423\u0411\u0414. \u0414\u043b\u044f \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d <code>enum Supporter<\/code>, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <code>SupporterTier<\/code> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0411\u0414. \u0414\u043b\u044f \u043f\u043e\u043b\u0435\u0439 <code>UserID<\/code>, <code>LanguageID<\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u0430\u0434\u0430\u043d\u044b, \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0411\u0414. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>[Key]<\/code>.<\/p>\n<p>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c (<i>view<\/i>), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441. \u0418 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f HTML-\u0442\u0435\u0433\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 (\u0447\u0442\u043e \u044f \u043b\u0438\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0431\u044b), \u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432\u043e\u0442 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<ul>\n<li><b><code>[DisplayName]<\/code><\/b> \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0438\u043c\u044f \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430. \u0418\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u0435\u043b\u043f\u0435\u0440\u0430 <code>Html.DisplayNameForModel<\/code> \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438.<\/li>\n<li><b><code>[Display]<\/code><\/b> \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <code>Name<\/code> \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430. \u0415\u0449\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Order, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 \u0444\u043e\u0440\u043c\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0445\u0435\u043b\u043f\u0435\u0440\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043b\u0430\u0441\u0441\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Order \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c).<\/li>\n<li><b><code>[HiddenInput]<\/code><\/b> \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <code>DisplayValue<\/code>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0438\u0431\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0445 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 (<code>DisplayValue=false<\/code>, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u0435\u0433\u0438 <code>input<\/code> \u0441 \u0442\u0438\u043f\u043e\u043c <code>hidden<\/code>), \u043b\u0438\u0431\u043e \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0430\u0434\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c, \u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (<code>DisplayValue=true<\/code>, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0438\u0441\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0431\u0435\u0437 \u0442\u0435\u0433\u043e\u0432)<\/li>\n<li><b><code>[ScaffoldColumn]<\/code><\/b> \u2013 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043b\u0438 \u043f\u043e\u043b\u0435 \u0432 \u0445\u0435\u043b\u043f\u0435\u0440\u0430\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Html.EditorForModel<\/code>). \u0415\u0441\u043b\u0438 <code>false<\/code> \u2013 \u0442\u043e \u0432 \u0444\u043e\u0440\u043c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0443\u0442 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>[HiddenInput(DisplayValue = false)]<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0445 \u0432\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>LastLoginDate<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0430\u043c \u0435\u0433\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0430\u0434\u043e.<\/li>\n<li><b><code>[Required]<\/code><\/b> \u2013 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0432\u0432\u0435\u0434\u0435\u043d\u043e \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430, \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 <code>ErrorMessage<\/code> \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c <code>AllowEmptyStrings<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u043c \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438.<\/li>\n<li><b><code>[EmailAddress]<\/code><\/b> \u2013 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439, \u043f\u043e \u0441\u0443\u0442\u0438, \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430.<\/li>\n<\/ul>\n<p>  \u041a\u043b\u0430\u0441\u0441\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0411\u0414 \u0433\u043e\u0442\u043e\u0432\u044b, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c (\u043a\u043b\u0430\u0441\u0441\u044b \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u043e\u043f\u0438\u0448\u0435\u043c \u043d\u0438\u0436\u0435).<\/p>\n<h2>V \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 <s>\u0432\u0435\u043d\u0434\u0435\u0442\u0442\u0430<\/s> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Views<\/i> \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>Users<\/i> \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0412\u0441\u0435 \u043d\u0430\u0448\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <i>_ViewStart.cshtml<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Views<\/i>) \u043c\u0430\u043a\u0435\u0442 <i>_Layout.cshtml<\/i>, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Views\\Shared<\/i>. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code>Index<\/code> (\u0444\u0430\u0439\u043b <i>Index.cshtml<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Users<\/i>):<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jh\/es\/jn\/jhesjnicwj2g1acx7yziv4f6wqy.png\"><\/p>\n<p>  \u0418 \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434:<\/p>\n<pre><code class=\"xml\">@model Example_Users.Models.UsersGrid @{    ViewBag.Title = \"Users page\"; } @using (@Html.BeginForm()) {    &lt;div&gt;        &lt;h3&gt;Users list:&lt;\/h3&gt;        @if (TempData[\"message\"] != null)        {&lt;div class=\"text-success\"&gt;@TempData[\"message\"]&lt;\/div&gt;}        @if (TempData[\"error\"] != null)        {&lt;div class=\"text-warning\"&gt;&lt;span class=\"alert\"&gt;ERROR:&lt;\/span&gt; @TempData[\"error\"]&lt;\/div&gt;}        @Html.Partial(\"List\")        &lt;p&gt;            &lt;input type=\"submit\" name=\"onNewUser\" value=\"New user\" \/&gt;            @*@Html.ActionLink(\"New user\", \"New\", \"Users\")*@        &lt;\/p&gt;    &lt;\/div&gt; }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u043e \u0432 \u0444\u0430\u0439\u043b <i>RouteConfig.cs<\/i> \u0432\u043d\u043e\u0441\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <code>Default<\/code>: <\/p>\n<pre><code class=\"cpp\">routes.MapRoute(name: \"Default\", url: \"{controller}\/{action}\/{id}\", defaults: new { controller = \"Users\", action = \"Index\", id = UrlParameter.Optional });<\/code><\/pre>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0430\u0434\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0441 <code>Html.Partial(\"List\")<\/code>. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <i>List.cshtml<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Views\\Shared<\/i>. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443-\u0433\u0440\u0438\u0434 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0411\u0414 <code>users<\/code>:<\/p>\n<pre><code class=\"xml\">@model Example_Users.Models.UsersGrid @using Example_Users.Domain &lt;div class=\"table-responsive\"&gt;     &lt;table class=\"table table-bordered table-hover\"&gt;         &lt;thead&gt;             &lt;tr&gt;                 &lt;th&gt;@Html.ActionLink(Html.DisplayNameFor(m =&gt; Model.Users.First().Loginname).ToString(), \"Index\", Request.QueryString.ToRouteValueDictionary(\"sortOrder\", Model.SortingInfo.NewOrder(Html.NameFor(m =&gt; Model.Users.First().Loginname).ToString())))                     @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m =&gt; Model.Users.First().Loginname).ToString())                 &lt;\/th&gt;                 &lt;th&gt;@Html.ActionLink(Html.DisplayNameFor(m =&gt; Model.Users.First().Language.LanguageName).ToString(), \"Index\", Request.QueryString.ToRouteValueDictionary(\"sortOrder\", Model.SortingInfo.NewOrder(Html.NameFor(m =&gt; Model.Users.First().Language).ToString())))                     @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m =&gt; Model.Users.First().Language).ToString())                 &lt;\/th&gt;                 &lt;th&gt;@Html.ActionLink(Html.DisplayNameFor(m =&gt; Model.Users.First().Email).ToString(), \"Index\", Request.QueryString.ToRouteValueDictionary(\"sortOrder\", Model.SortingInfo.NewOrder(Html.NameFor(m =&gt; Model.Users.First().Email).ToString())))                     @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m =&gt; Model.Users.First().Email).ToString())                 &lt;\/th&gt;                 &lt;th&gt;@Html.ActionLink(Html.DisplayNameFor(m =&gt; Model.Users.First().SupporterTier).ToString(), \"Index\", Request.QueryString.ToRouteValueDictionary(\"sortOrder\", Model.SortingInfo.NewOrder(Html.NameFor(m =&gt; Model.Users.First().SupporterTier).ToString())))                     @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m =&gt; Model.Users.First().SupporterTier).ToString())                 &lt;\/th&gt;                 &lt;th&gt;@Html.ActionLink(Html.DisplayNameFor(m =&gt; Model.Users.First().LastLoginDate).ToString(), \"Index\", Request.QueryString.ToRouteValueDictionary(\"sortOrder\", Model.SortingInfo.NewOrder(Html.NameFor(m =&gt; Model.Users.First().LastLoginDate).ToString())))                     @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m =&gt; Model.Users.First().LastLoginDate).ToString())                 &lt;\/th&gt;             &lt;\/tr&gt;         &lt;\/thead&gt;         &lt;tbody&gt;             @foreach (var item in Model.Users)             {             &lt;tr&gt;                 &lt;td&gt;@Html.ActionLink(item.Loginname, \"Edit\", \"Users\", new { UserID = item.UserID }, null)&lt;\/td&gt;                 &lt;td&gt;@Html.DisplayFor(modelitem =&gt; item.Language.LanguageName)&lt;\/td&gt;                 &lt;td&gt;@Html.DisplayFor(modelitem =&gt; item.Email)&lt;\/td&gt;                 &lt;td class=\"@Html.DisplayFor(modelitem =&gt; item.SupporterTier)\"&gt;@if (item.SupporterTier != Supporter.None) {@Html.DisplayFor(modelitem =&gt; item.SupporterTier);}&lt;\/td&gt;                 &lt;td&gt;@if (item.IsLastLogin) {@Html.DisplayFor(modelitem =&gt; item.LastLoginDate)}&lt;\/td&gt;             &lt;\/tr&gt;             }         &lt;\/tbody&gt;     &lt;\/table&gt; &lt;\/div&gt; @if (Model.PagingInfo.totalPages &gt; 1) {     &lt;ul class=\"pagination\"&gt;         @Html.PageLinks(Model.PagingInfo, x =&gt; Url.Action(\"Index\", new { page = x, sortOrder = Model.SortingInfo.currentSort }))     &lt;\/ul&gt; }<\/code><\/pre>\n<p>  \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0445\u0435\u043b\u043f\u0435\u0440\u044b <code>Html.DisplayNameFor<\/code> \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u0435\u043a\u0442 <code>Model.Users<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <code>UserClass<\/code>, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431: \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserClass<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: <code>Model.Users.First().Loginname<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>Loginname<\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code>Users<\/code> \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>[Display(Name = \"Login\")]<\/code>, \u0442\u043e \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u00abLogin\u00bb:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hv\/kf\/dv\/hvkfdvojevmzacuid51wurye8ik.png\"><\/p>\n<p>  \u0427\u0442\u043e \u0435\u0449\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>List<\/code>? \u0411\u043b\u043e\u043a \u0441 <code>foreach<\/code>, \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserClass<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 <code>Users<\/code>, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u0410 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0442\u0443\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b <code>SortingInfo<\/code> \u0438 <code>PagingInfo<\/code> \u0432 \u043d\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 <code>UsersGrid<\/code>. \u0410 \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u043c \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0442\u0435\u0433\u0430\u0445 <code>&lt;th&gt;<\/code>) \u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043d\u0438\u0437\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043f\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439). \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0438\u0441\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <code>IEnumerable&lt;UserClass&gt;<\/code>. \u0410 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 <code>UsersGrid<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <i>UsersGrid.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Model<\/i>.<\/p>\n<pre><code class=\"cpp\">public class UsersGrid {     public IEnumerable&lt;UserClass&gt; Users { get; set; }     public PagingInfo PagingInfo { get; set; }     public SortingInfo SortingInfo { get; set; } }<\/code><\/pre>\n<p>  \u0418 \u0441\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u044b <code>PagingInfo<\/code> \u0438 <code>SortingInfo<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 <code>GridInfo.cs<\/code> \u0432 \u0442\u043e\u043c \u0436\u0435 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<pre><code class=\"cpp\">public class PagingInfo {     \/\/ \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u043e\u043a \u0432 \u0432\u044b\u0431\u043e\u0440\u043a\u0435     public int totalItems { get; set; }     \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443     public int itemsPerPage { get; set; }     \/\/ \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430     public int currentPage { get; set; }     \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b     public int showPages { get; set; }     \/\/ \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446     public int totalPages     {         get { return (int)Math.Ceiling((decimal)totalItems \/ itemsPerPage); }     }     \/\/ \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043b\u0435\u0432\u0430 \u0438 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439     public int pagesSide     {         get { return (int)Math.Truncate((decimal)showPages \/ 2); }     } }   public class SortingInfo {     \/\/ \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438\u0434\u0451\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430     public string currentOrder { get; set; }     \/\/ \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438     public SortDirection currentDirection { get; set; }     \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438     public string currentSort     {         get { return currentDirection != SortDirection.Descending ? currentOrder : currentOrder + \"_desc\"; }     }     \/\/ \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 (\u0435\u0441\u043b\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 - \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443)     public string NewOrder(string columnName)     {         return columnName == currentOrder &amp;&amp; currentDirection != SortDirection.Descending ? columnName + \"_desc\" : columnName;     } }<\/code><\/pre>\n<p>  \u0410 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 <i>GridHelpers.cs<\/i> (\u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>HtmlHelpers<\/i>):<\/p>\n<pre><code class=\"cpp\">public static class GridHelpers {     \/\/ \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u043f\u0435\u0439\u0434\u0436\u0435\u0440 \u0432 \u0432\u0438\u0434\u0435 1 ... 3 4 5 ... Last     public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func&lt;int, string&gt; pageUrl)     {         StringBuilder result = new StringBuilder();         if (pagingInfo.currentPage &gt; pagingInfo.pagesSide + 1)         {\/\/ \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430             TagBuilder li = new TagBuilder(\"li\");             li.AddCssClass(\"page-item\");               TagBuilder tag = new TagBuilder(\"a\");             tag.MergeAttribute(\"href\", pageUrl(1));             tag.InnerHtml = \"1\";               li.InnerHtml = tag.ToString();             result.Append(li.ToString());         }         int page1 = pagingInfo.currentPage - pagingInfo.pagesSide;         int page2 = pagingInfo.currentPage + pagingInfo.pagesSide;         if (page1 &lt; 1)         {             page2 = page2 - page1 + 1;             page1 = 1;         }         if (page2 &gt; pagingInfo.totalPages) page2 = pagingInfo.totalPages;         if (page1 &gt; 2)         {\/\/ ...             TagBuilder li = new TagBuilder(\"li\");             li.AddCssClass(\"page-item\");               TagBuilder tag = new TagBuilder(\"span\");             tag.InnerHtml = \"...\";             tag.AddCssClass(\"page-item\");             tag.AddCssClass(\"disabled\");               li.InnerHtml = tag.ToString();             result.Append(li.ToString());         }         for (int i = page1; i &lt;= page2; i++)         {\/\/ \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b             TagBuilder li = new TagBuilder(\"li\");             li.AddCssClass(\"page-item\");             if (i == pagingInfo.currentPage) li.AddCssClass(\"active\");               TagBuilder tag = new TagBuilder(\"a\");             tag.AddCssClass(\"page-link\");             tag.MergeAttribute(\"href\", pageUrl(i));             tag.InnerHtml = i.ToString();               li.InnerHtml = tag.ToString();             result.Append(li.ToString());         }         if (page2 &lt; pagingInfo.totalPages)         {\/\/ ... \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430             TagBuilder li = new TagBuilder(\"li\");             li.AddCssClass(\"page-item\");               TagBuilder tag = new TagBuilder(\"span\");             tag.InnerHtml = \"...\";             tag.AddCssClass(\"page-item\");             tag.AddCssClass(\"disabled\");             li.InnerHtml = tag.ToString();             result.Append(li.ToString());               li = new TagBuilder(\"li\");             li.AddCssClass(\"page-item\");               tag = new TagBuilder(\"a\");             tag.MergeAttribute(\"href\", pageUrl(pagingInfo.totalPages));             tag.InnerHtml = pagingInfo.totalPages.ToString();               li.InnerHtml = tag.ToString();             result.Append(li.ToString());         }         return MvcHtmlString.Create(result.ToString());     }       public static IHtmlString SortIdentifier(this HtmlHelper htmlHelper, string sortOrder, string field)     {         if (string.IsNullOrEmpty(sortOrder) || (sortOrder.Trim() != field &amp;&amp; sortOrder.Replace(\"_desc\", \"\").Trim() != field)) return null;         string glyph = \"glyphicon glyphicon-chevron-up\";         if (sortOrder.ToLower().Contains(\"desc\"))         {             glyph = \"glyphicon glyphicon-chevron-down\";         }         var span = new TagBuilder(\"span\");         span.Attributes[\"class\"] = glyph;         return MvcHtmlString.Create(span.ToString());     }       public static RouteValueDictionary ToRouteValueDictionary(this NameValueCollection collection, string newKey, string newValue)     {         var routeValueDictionary = new RouteValueDictionary();         foreach (var key in collection.AllKeys)         {             if (key == null) continue;             if (routeValueDictionary.ContainsKey(key))                 routeValueDictionary.Remove(key);             routeValueDictionary.Add(key, collection[key]);         }         if (string.IsNullOrEmpty(newValue))         {             routeValueDictionary.Remove(newKey);         }         else         {             if (routeValueDictionary.ContainsKey(newKey))                 routeValueDictionary.Remove(newKey);             routeValueDictionary.Add(newKey, newValue);         }         return routeValueDictionary;     } }<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0433\u0440\u0438\u0434 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0435\u0437 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0431\u0435\u0437 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0445\u0435\u043b\u043f\u0435\u0440\u0430 \u0434\u043b\u044f \u0446\u0435\u043b\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 ASP.NET MVC \u043d\u0435\u0442, \u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e (\u043b\u0438\u0431\u043e \u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u0435\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c). \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044f \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 \u043a\u043d\u0438\u0433\u0430\u0445 \u043f\u043e ASP.NET MVC \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435. \u041f\u0440\u0438\u0447\u0435\u043c, \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434, \u043b\u0438\u0431\u043e \u0432\u043e\u0432\u0441\u0435 \u043d\u0435\u0442, \u043b\u0438\u0431\u043e \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043e\u0441\u043c\u044b\u0441\u043b\u0438\u0432\u0430\u0442\u044c, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0438 \u0434\u043e\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0432 \u0442\u0435\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u2013 \u043d\u0443 \u0430 \u0432\u0434\u0440\u0443\u0433 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u0430\u043d\u0438\u0446? \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wj\/dt\/yr\/wjdtyrmtbxm5f_5jfj7til_iqy0.png\"><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <code>UserClass<\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/0u\/80\/-i\/0u80-itckfou4ciyyxremebrqy8.png\"><\/p>\n<p>  \u0418 \u043a\u043e\u0434 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">@model Example_Users.Models.UserModel @{     ViewBag.Title = \"New \" + Html.DisplayNameForModel().ToString().ToLower(); } &lt;h2&gt;@ViewBag.Title&lt;\/h2&gt; @using (@Html.BeginForm(\"New\", \"Users\", FormMethod.Post)) {     @Html.EditorFor(m =&gt; m.User);     @Html.LabelFor(m =&gt; Model.User.Language)&lt;br \/&gt;     @Html.DropDownListFor(m =&gt; Model.User.Language.LanguageID, Model.SelectLanguages())     &lt;span\/&gt;@Html.ValidationMessageFor(m =&gt; Model.User.Language.LanguageID)&lt;br \/&gt;     &lt;br \/&gt;     &lt;p&gt;&lt;input type=\"submit\" name=\"action\" value=\"Add\" \/&gt; &lt;input type=\"button\" onclick=\"history.go(-1)\" value=\"Cancel\" \/&gt;&lt;\/p&gt;     @*&lt;p&gt;@Html.ActionLink(\"Back to list\", \"Index\")&lt;\/p&gt;*@ }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u0435\u043b\u043f\u0435\u0440\u0430 <code>Html.EditorFor<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0433\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserClass<\/code>. \u041e\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/v-\/rz\/kw\/v-rzkwz4dtui-xhs4lo2vbjyf3s.png\"><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u043b\u0430\u0441\u0441 <code>UserModel<\/code>, \u0430 \u043d\u0435 <code>UserClass<\/code> \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0421\u0430\u043c \u043a\u043b\u0430\u0441\u0441 <code>UserModel<\/code> \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <i>UserModel.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Models<\/i>:<\/p>\n<pre><code class=\"cpp\">public class UserModel {     public UserClass User { get; set; }     private IList&lt;LanguageClass&gt; Languages { get; set; }       public UserModel() {}     public UserModel(UserClass user, IList&lt;LanguageClass&gt; languages)     {         this.User = user;         this.Languages = languages;     }       public IEnumerable&lt;SelectListItem&gt; SelectLanguages()     {         if (Languages != null) { return new SelectList(Languages, \"LanguageID\", \"LanguageName\"); }         return null;     } }<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 <code>UserClass<\/code> \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <code>LanguageClass<\/code>. \u042d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u044f\u0437\u044b\u043a\u043e\u0432, \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0432 \u043d\u0451\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: <code>@Html.DropDownListFor(m =&gt; Model.User.Language.LanguageID, Model.SelectLanguages(), \"\")<\/code><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0445\u0435\u043b\u043f\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>SelectLanguages()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u044f\u0437\u044b\u043a\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 <code>SelectList<\/code> \u0441 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438. \u0412\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0438\u0434\u0435\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430\u0445 \u043a \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c \u043f\u043e\u043b\u0435\u0439. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0440\u0430\u0437\u0443 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 <code>SelectList<\/code>, \u043d\u043e \u043c\u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0445\u0435\u043b\u043f\u0435\u0440\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0445\u0435\u043b\u043f\u0435\u0440 <code>Html.EditorFor(m =&gt; m.User)<\/code> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <code>LanguageClass<\/code> (\u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043e\u0431\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043d\u043e \u0442\u0443\u0442 \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c\u2026).<\/p>\n<p>  \u0418 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserModel<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserClass<\/code>, \u0442\u043e \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440 <code>Html.EditorForModel()<\/code> \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0445\u0435\u043b\u043f\u0435\u0440\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u043c\u0438 \u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0445\u0435\u043b\u043f\u0435\u0440 <code>Html.EditorFor()<\/code> \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>User<\/code>.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u044d\u0433: <code>Html.ActionLink(\"Back to list\", \"Index\")<\/code><\/p>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u2013 \u043a\u043e\u0433\u0434\u0430 \u0432 \u0444\u043e\u0440\u043c\u0435 \u0443 \u0442\u0435\u0431\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0442\u0438\u043f\u0430 <code>button<\/code>, \u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u2013 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043c\u0443\u0434\u0440\u0438\u0442\u044c \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0438\u0434 \u043d\u0430 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u2013 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044a\u0435\u043a\u0442 <code>UserClass<\/code>, \u043d\u043e \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0415\u0441\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2013 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0432\u0438\u0434\u0430: <code>\/&gt;<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0422\u0443\u0442, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u0443\u0436\u0435 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0438 \u0432\u043e\u0442 \u2013 \u0432\u0430\u043c \u0443\u0436\u0435 \u043d\u0430\u0434\u043e \u0434\u0432\u0430\u0436\u0434\u044b \u0449\u0435\u043b\u043a\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0442\u043c\u0435\u043d\u044b), \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u0418 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <code>UserClass<\/code>:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a2\/eo\/xh\/a2eoxhk3nzvbvs0h7s_nmjxuems.png\"><\/p>\n<p>  \u0418 \u0435\u0433\u043e \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">@model Example_Users.Models.UserModel @{     ViewBag.Title = \"Edit \" + Html.DisplayNameForModel().ToString().ToLower(); } &lt;h2&gt;@ViewBag.Title @Model.User.Loginname&lt;\/h2&gt; @using (@Html.BeginForm(\"Edit\", \"Users\", FormMethod.Post)) {     @Html.HiddenFor(m =&gt; Model.User.UserID)     &lt;div&gt;         @Html.LabelFor(m =&gt; Model.User.Loginname)         @Html.EditorFor(m =&gt; Model.User.Loginname)         @Html.ValidationMessageFor(m =&gt; Model.User.Loginname)     &lt;\/div&gt;     &lt;div&gt;         @Html.LabelFor(m =&gt; Model.User.Language)         @Html.DropDownListFor(m =&gt; Model.User.Language.LanguageID, Model.SelectLanguages())         @Html.ValidationMessageFor(m =&gt; Model.User.Language.LanguageID)     &lt;\/div&gt;     &lt;div&gt;         @Html.LabelFor(m =&gt; Model.User.Email)         @Html.EditorFor(m =&gt; Model.User.Email)         @Html.ValidationMessageFor(m =&gt; Model.User.Email)     &lt;\/div&gt;     &lt;div&gt;         @Html.LabelFor(m =&gt; Model.User.SupporterTier)         @Html.EditorFor(m =&gt; Model.User.SupporterTier)         @*@Html.EnumDropDownListFor(m =&gt; Model.User.SupporterTier)*@         @*@Html.DropDownListFor(m =&gt; m.Model.User.SupporterTier, new SelectList(Enum.GetNames(typeof(Example_Users.Domain.Supporter))))*@         @Html.ValidationMessageFor(m =&gt; Model.User.SupporterTier)     &lt;\/div&gt;     &lt;br \/&gt;     &lt;p&gt;&lt;input type=\"submit\" name=\"action\" value=\"Save\" \/&gt; &lt;input type=\"submit\" name=\"action\" value=\"Remove\" onclick=\"javascript:return confirm('Are you sure?');\" \/&gt; &lt;input type=\"submit\" name=\"action\" value=\"Cancel\" \/&gt;&lt;\/p&gt; }<\/code><\/pre>\n<p>  \u0410 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0445\u0435\u043b\u043f\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0433\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u043e\u043c \u2013 \u0431\u043e\u043b\u0435\u0435 \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/3g\/ew\/as\/3gewasn6m2whqy9odk4gvrn2l0c.png\"><\/p>\n<p>  \u0418 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a. \u0412\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0432\u0438\u0434\u0430: <code>\/&gt;<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0430, \u043a\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (<i>Save<\/i>, <i>Remove<\/i>): <code>\/&gt;<\/code> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u044d\u0442\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u043c. \u043d\u0438\u0436\u0435).<\/p>\n<h2>Enum<\/h2>\n<p>  \u0418 \u0442\u0443\u0442 \u0435\u0449\u0435 \u0432\u043e\u0437\u043d\u0438\u043a \u043d\u044e\u0430\u043d\u0441, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u0438\u043f\u0430 <i>enum<\/i>. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440 <code>Html.EditorFor()<\/code>, \u0442\u043e \u043d\u0430 \u0444\u043e\u0440\u043c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u0442\u0435\u0433 \u0432\u0438\u0434\u0430 <code>&lt;input type=\u201dtext\u201d\/&gt;<\/code>), \u0430 \u043d\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0435 \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0442.\u0435. \u0442\u0435\u0433 <code>&lt;select&gt;<\/code> \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043e\u043f\u0446\u0438\u0439 <code>&lt;option&gt;<\/code>).<\/p>\n<p>  1. \u041f\u0440\u044f\u043c\u043e\u043b\u0438\u043d\u0435\u0439\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0445\u0435\u043b\u043f\u0435\u0440\u0430 \u0442\u0438\u043f\u0430 <code>Html.DropDownListFor()<\/code> \u0438\u043b\u0438 <code>Html.ListBoxFor()<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435: <code>@Html.DropDownListFor(m =&gt; m.Model.User.SupporterTier, new SelectList(Enum.GetNames(typeof(Example_Users.Domain.Supporter))))<\/code>. \u0422\u0443\u0442 \u0434\u0432\u0430 \u043c\u0438\u043d\u0443\u0441\u0430 \u2013 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u044d\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e \u0438 \u0434\u043b\u044f \u0445\u0435\u043b\u043f\u0435\u0440\u0430 <code>Html.EditorForModel()<\/code> \u0438\u043b\u0438 <code>Html.EditorFor()<\/code> \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442.<\/p>\n<p>  2. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0442\u0438\u043f\u0430 <code>Editor<\/code>. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <i>Supporter.cshtml<\/i> \u0432 \u043f\u0430\u043f\u043a\u0435 <i>Views\\Shared\\EditorTemplates<\/i>:<\/p>\n<pre><code class=\"xml\">@model Example_Users.Domain.Supporter @Html.DropDownListFor(m =&gt; m, new SelectList(Enum.GetNames(Model.GetType()), Model.ToString()))<\/code><\/pre>\n<p>  \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0442\u0438\u043f\u0430, \u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 <code>Html.EditorFor(m =&gt; Model.SupporterTier)<\/code>, \u0430 <code>Html.EditorFor(m =&gt; Model.SupporterTier, \"Supporter\")<\/code>. \u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 <code>[UIHint(\"Supporter\")]<\/code>. \u0418 \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Html.EditorForModel()<\/code> \u2013 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0430 <code>Html.EditorFor(m =&gt; Model.SupporterTier, \"Supporter\")<\/code> \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442.<\/p>\n<p>  \u041c\u043d\u0435 \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0435\u043b \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e \u0447\u0442\u043e, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>New<\/code>) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0445\u0435\u043b\u043f\u0435\u0440\u043e\u0432 <code>Html.EditorFor()<\/code> \u0438 <code>Html.EditorForModel()<\/code> \u0432\u044b\u043f\u0430\u0434\u0430\u043b\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439: \u00ab<i>\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u043e\u0434\u0435\u043b\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 NULL, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0438\u043f\u0430 \u00abExample_Users.Domain.Supporter\u00bb, \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 NULL.<\/i>\u00bb \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u2013 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c, \u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  3. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0435\u043b\u043f\u0435\u0440 <code>Html.EnumDropDownListFor()<\/code>, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0412\u043e\u0442 \u0442\u0443\u0442 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0451 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041a\u0440\u043e\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u00ab\u043d\u043e\u00bb: \u0445\u0435\u043b\u043f\u0435\u0440 <code>Html.EditorForModel()<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0445\u0435\u043b\u043f\u0435\u0440\u044b <code>Html.EditorFor()<\/code> \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>Html.EnumDropDownListFor()<\/code>. \u0418, \u043a\u0430\u043a \u044f \u043f\u043e\u043d\u044f\u043b, \u044d\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0431\u043e\u0439\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 \u2013 <code>[UIHint]<\/code>, <code>[DataType]<\/code> \u0438 <code>[EnumDataType]<\/code> \u0442\u0443\u0442 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e None \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>Supporter<\/code>.<\/p>\n<p>  4. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043c\u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0435\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, <a href=\"https:\/\/odetocode.com\/Blogs\/scott\/archive\/2012\/08\/29\/working-with-enums-and-templates-in-asp-net-mvc.aspx\">\u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430<\/a>: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <i>Enum.cshtml<\/i> \u0432 \u043f\u0430\u043f\u043a\u0435 <i>Views\\Shared\\EditorTemplates<\/i>:<\/p>\n<pre><code class=\"xml\">@using System.ComponentModel.DataAnnotations @model Enum @{      Func&lt;object, string&gt; GetDisplayName = o =&gt;     {         var result = null as string;         var display = o.GetType()                         .GetMember(o.ToString()).First()                         .GetCustomAttributes(false)                         .OfType&lt;DisplayAttribute&gt;()                         .LastOrDefault();         if (display != null) result = display.GetName();         return result ?? o.ToString();     };     var values = Enum.GetValues(ViewData.ModelMetadata.ModelType).Cast&lt;object&gt;()         .Select(v =&gt; new SelectListItem         {             Selected = v.Equals(Model),             Text = GetDisplayName(v), \/\/ v.ToString(),             Value = v.ToString()         }); } @Html.DropDownList(\"\", values)<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0443\u0442 \u0432\u0441\u0451 \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c: \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e. \u0414\u0430\u0436\u0435 <code>[UIHint(\"Enum\")]<\/code> \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c. \u041f\u0440\u0438\u0447\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>[Display(Name)]<\/code> \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<h2>C \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/h2>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0430\u0439\u043b <i>UsersController.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>Controllers<\/i>.<\/p>\n<pre><code class=\"cpp\">public class UsersController : Controller {     public int pageSize = 10;     public int showPages = 15;     public int count = 0;       \/\/ \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439     public ViewResult Index(string sortOrder, int page = 1)     {         string sortName = null;         System.Web.Helpers.SortDirection sortDir = System.Web.Helpers.SortDirection.Ascending;         sortOrder = Base.parseSortForDB(sortOrder, out sortName, out sortDir);         UsersRepository rep = new UsersRepository();         UsersGrid users = new UsersGrid {             Users = rep.List(sortName, sortDir, page, pageSize, out count),             PagingInfo = new PagingInfo             {                 currentPage = page,                 itemsPerPage = pageSize,                 totalItems = count,                 showPages = showPages             },             SortingInfo = new SortingInfo {                 currentOrder = sortName,                 currentDirection = sortDir             }         };         return View(users);     }       [ReferrerHold]     [HttpPost]     public ActionResult Index(string onNewUser)     {         if (onNewUser != null) {             TempData[\"referrer\"] = ControllerContext.RouteData.Values[\"referrer\"];             return View(\"New\", new UserModel(new UserClass(), Languages()));         }         return View();     }       [ReferrerHold]     public ActionResult New()     {         TempData[\"referrer\"] = ControllerContext.RouteData.Values[\"referrer\"];         return View(\"New\", new UserModel(new UserClass(), Languages()));     }       [HttpPost]     public ActionResult New(UserModel model)     {         if (ModelState.IsValid)         {             if (model.User == null || model.User.Language == null || model.User.Language.LanguageID == 0) RedirectToAction(\"Index\");             UsersRepository rep = new UsersRepository();             if (rep.AddUser(model.User)) TempData[\"message\"] = string.Format(\"{0} has been added\", model.User.Loginname);             else TempData[\"error\"] = string.Format(\"{0} has not been added!\", model.User.Loginname);             if (TempData[\"referrer\"] != null) return Redirect(TempData[\"referrer\"].ToString());             return RedirectToAction(\"Index\");         }         else         {             model = new UserModel(model.User, Languages()); \/\/ \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u0440\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a model.Languages, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c             return View(model);         }     }       [ReferrerHold]     public ActionResult Edit(int UserID)     {         UsersRepository rep = new UsersRepository();         UserClass user = rep.FetchByID(UserID);         if (user == null) return HttpNotFound();         TempData[\"referrer\"] = ControllerContext.RouteData.Values[\"referrer\"];         return View(new UserModel(user, Languages()));     }       [HttpPost]     public ActionResult Edit(UserModel model, string action)     {         if (action == \"Cancel\")         {             if (TempData[\"referrer\"] != null) return Redirect(TempData[\"referrer\"].ToString());             return RedirectToAction(\"Index\");         }         if (ModelState.IsValid)         {             if (model.User == null || model.User.Language == null || model.User.Language.LanguageID == 0) RedirectToAction(\"Index\");             UsersRepository rep = new UsersRepository();             if (action == \"Save\")             {                 if (rep.ChangeUser(model.User)) TempData[\"message\"] = string.Format(\"{0} has been saved\", model.User.Loginname);                 else TempData[\"error\"] = string.Format(\"{0} has not been saved!\", model.User.Loginname);             }             if (action == \"Remove\")             {                 if (rep.RemoveUser(model.User)) TempData[\"message\"] = string.Format(\"{0} has been removed\", model.User.Loginname);                 else TempData[\"error\"] = string.Format(\"{0} has not been removed!\", model.User.Loginname);             }             if (TempData[\"referrer\"] != null) return Redirect(TempData[\"referrer\"].ToString());             return RedirectToAction(\"Index\");         }         else         {             model = new UserModel(model.User, Languages());              return View(model);         }     }       public IList&lt;LanguageClass&gt; Languages()     {         IList&lt;LanguageClass&gt; languages = new List&lt;LanguageClass&gt;();         LanguagesRepository rep = new LanguagesRepository();         languages = rep.List();         return languages;     } }<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430:<\/p>\n<p>  1) \u041c\u0435\u0442\u043e\u0434\u044b <code>Index<\/code><\/p>\n<p>  \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439: <code>public ViewResult Index(string sortOrder, int page = 1)<\/code><\/p>\n<p>  \u0422\u0443\u0442 \u0434\u0432\u0430 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>sortOrder<\/code> \u0438 <code>page<\/code>. \u0421 <code>page<\/code> \u0432\u0441\u0451 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0430 \u0432\u043e\u0442 \u0447\u0435\u0440\u0435\u0437 <code>sortOrder<\/code> \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043c \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u0442\u044c \u0432 SQL-\u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0430\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0435 \u0431\u0443\u0434\u0443, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <i>Base.cs<\/i>): <code>sortOrder = Base.parseSortForDB(sortOrder, out sortName, out sortDir);<\/code><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0451 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f <code>UsersRepository<\/code> (\u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0421\u0423\u0411\u0414, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435), \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>List<\/code> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UsersGrid<\/code> \u0438\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u041f\u0440\u0438\u0447\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 totalItem \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>List<\/code>, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UsersGrid<\/code>. \u0414\u0430\u043b\u0435\u0435 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 Index \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c <code>[HttpPost]<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 <code>New<\/code> \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>Index<\/code>: <code>public ActionResult Index(string onNewUser)<\/code><\/p>\n<p>  \u0412\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>onNewUser<\/code> \u043f\u0435\u0440\u0435\u043a\u043b\u0438\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c <code>\/&gt;<\/code> \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>Index<\/code> \u0438 \u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u043d\u0430 \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0441\u0432\u0435\u0440\u044f\u0435\u043c \u0441 <i>null<\/i>. \u0415\u0441\u043b\u0438 \u0431\u044b \u043a\u043d\u043e\u043f\u043e\u043a \u0442\u0438\u043f\u0430 <code>submit<\/code> \u0431\u044b\u043b\u043e \u0431\u044b \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>Index<\/code> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u0441\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u00abNew user\u00bb).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserModel<\/code>, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>UserClass<\/code> \u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u044f\u0437\u044b\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u0445 \u0438\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e <code>New<\/code>. \u0421\u043f\u0438\u0441\u043e\u043a \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f <code>LanguageRepository<\/code> \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 <code>List<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">public IList&lt;LanguageClass&gt; Languages() {     LanguagesRepository rep = new LanguagesRepository();     return rep.List(); }<\/code><\/pre>\n<p>  2) \u041c\u0435\u0442\u043e\u0434\u044b <code>New<\/code><\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>New<\/code> \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u0434\u0435\u043b\u0430\u043d \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043b\u0438\u043a\u0430 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 <i>New User<\/i> \u0434\u043b\u044f \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 <code>Html.ActionLink(\"New user\", \"New\", \"Users\")<\/code> \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>Index<\/code>. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>New<\/code>) \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0443.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>New<\/code> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c model \u0442\u0438\u043f\u0430 <code>UserModel<\/code> \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u044b \u0441 \u0446\u0435\u043b\u044c\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0411\u0414: <code>public ActionResult New(UserModel model)<\/code><\/p>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f New \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserModel<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 (\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432 <code>UserClass<\/code> \u0438 <code>LanguageClass<\/code>), \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f <code>UsersRepository<\/code> \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0411\u0414, \u0432\u044b\u0437\u0432\u0430\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>AddUser(model.User)<\/code>. \u041f\u043e\u0442\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (\u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u044b\u043b \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>New<\/code>) \u0438 \u0442\u0430\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u0443\u0441\u043f\u0435\u0445\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435.<\/p>\n<p>  3) \u041c\u0435\u0442\u043e\u0434\u044b <code>Edit<\/code><\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>Edit<\/code> \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>UserID<\/code> (\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f) \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0449\u0435\u043b\u0447\u043e\u043a \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: <code>public ActionResult Edit(int UserID)<\/code><\/p>\n<p>  \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u0439 <code>UsersRepository<\/code> \u0438 \u0438\u0437 \u043d\u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>FetchByID(UserID)<\/code> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <code>UserClass<\/code>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0434\u0430\u0447\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u2013 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserModel<\/code> \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u044f\u0437\u044b\u043a\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code>Edit<\/code> \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0438\u043f\u0430 <code>UserModel<\/code> \u0438 \u0441\u0442\u0440\u043e\u043a\u0438 <code>action<\/code>: <code>public ActionResult Edit(UserModel model, string action)<\/code><\/p>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 <code>UserModel<\/code> \u0438 \u043e\u043d \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 (\u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u044b) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>Edit<\/code>. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>action<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0438\u043c\u0435\u043d\u0438 HTML-\u0442\u0435\u0433\u043e\u0432 \u0442\u0438\u043f\u0430 <code>input<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0438\u0434\u0435\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>value<\/code> \u044d\u0442\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a. \u0414\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>Cancel<\/code>, \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u043e\u0442\u043c\u0435\u043d\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430\u0437\u0430\u0434 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439 \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code>New<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043a \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e <code>Edit<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <code>ActionFilter<\/code>: \u043a\u043b\u0430\u0441\u0441 <code>ReferrerHoldAttribute<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 <i>ReferrerHoldAttribute.cs<\/i> (\u043a\u0430\u0442\u0430\u043b\u043e\u0433 <i>HtmlAttribute<\/i>):<\/p>\n<pre><code class=\"cpp\">public class ReferrerHoldAttribute : ActionFilterAttribute {     public override void OnActionExecuting(ActionExecutingContext filterContext)     {         var referrer = filterContext.RequestContext.HttpContext.Request.UrlReferrer;         if (referrer != null) filterContext.RouteData.Values.Add(\"referrer\", referrer);         base.OnActionExecuting(filterContext);     } }<\/code><\/pre>\n<p>  \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab<i>New user<\/i>\u00bb \u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: <code>TempData[\"referrer\"] = ControllerContext.RouteData.Values[\"referrer\"];<\/code><\/p>\n<p>  \u041d\u0430\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435, \u043d\u043e \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430.<\/p>\n<p>  \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u0432 \u0442\u0435\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 <code>New<\/code> \u0438 <code>Edit<\/code>, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u044b\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u044d\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f: <code>if (TempData[\"referrer\"] != null) return Redirect(TempData[\"referrer\"].ToString());<\/code><\/p>\n<p>  \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>action<\/code> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 <i>Save<\/i> \u0438 <i>Remove<\/i> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f <code>UsersRepository<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>ChangeUser(model.User)<\/code> \u0438 <code>RemoveUser(model.User)<\/code>. \u041f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (\u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u044b\u043b \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>Edit<\/code>) \u0438 \u0442\u0430\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u0443\u0441\u043f\u0435\u0445\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e \u043d\u0435\u0443\u0434\u0430\u0447\u0435.<\/p>\n<h2>ADO.NET \u0438 MySQL \u2013 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u0439<\/h2>\n<p>  \u0412\u043e\u0442 \u0442\u0443\u0442 \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0434\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0434\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0421\u0423\u0411\u0414. \u041d\u0430\u043c \u043d\u0430\u0434\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>Users<\/code>, \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u044f\u0437\u044b\u043a\u043e\u0432 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Languages<\/code>.<\/p>\n<p>  \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <i>MySQL.Data<\/i> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>MySqlCommand<\/code>:<\/p>\n<pre><code class=\"cpp\">using (MySqlConnection connect = new MySqlConnection(\u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f)) {     string sql = \"\u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\";     using (MySqlCommand cmd = new MySqlCommand(sql, connect))     {         cmd.Parameters.Add(\"\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\", \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430).Value = \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430;         connect.Open();         result = cmd.ExecuteNonQuery() &gt;= 0; \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (INSERT, UPDATE, DELETE) \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c cmd.ExecuteScalar() \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 SELECT     } }<\/code><\/pre>\n<p>  \u0438\u043b\u0438 <code>MySqlDataReader<\/code> \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430:  <\/p>\n<pre><code class=\"cpp\">using (MySqlConnection connect = new MySqlConnection(\u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f)) {     string sql = \"\u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\";     using (MySqlDataReader dr = cmd.ExecuteReader())     {         cmd.Parameters.Add(\"\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\", \u0442\u0438\u043f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430).Value = \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430;         objConnect.Open();         while (dr.Read())         {\/\/ \u0442\u0443\u0442 \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432         }     } }<\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <i>UserRepository.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Models<\/i>:<\/p>\n<pre><code class=\"cpp\">public class UsersRepository {     public bool AddUser(UserClass user)     {         user.UserID = AddUser(Name: user.Loginname, LanguageID: user.Language.LanguageID, Email: user.Email, SupporterTier: user.SupporterTier);         return user.UserID &gt; 0;     }       public int AddUser(string Name, int LanguageID, string Email, Supporter SupporterTier)     {         int ID = 0;         using (MySqlConnection connect = new MySqlConnection(Base.strConnect))         {             string sql = \"INSERT INTO `Users` (`Loginname`, `LanguageID`, `Email`, `SupporterTier`) VALUES (@Loginname, @LanguageID, @Email, @SupporterTier)\";             using (MySqlCommand cmd = new MySqlCommand(sql, connect))             {                 cmd.Parameters.Add(\"Loginname\", MySqlDbType.String).Value = Name;                 cmd.Parameters.Add(\"LanguageID\", MySqlDbType.Int32).Value = LanguageID;                 cmd.Parameters.Add(\"Email\", MySqlDbType.String).Value = Email;                 cmd.Parameters.Add(\"SupporterTier\", MySqlDbType.Int32).Value = SupporterTier;                 connect.Open();                 if (cmd.ExecuteNonQuery() &gt;= 0)                 {                     sql = \"SELECT LAST_INSERT_ID() AS ID\";                     cmd.CommandText = sql;                     int.TryParse(cmd.ExecuteScalar().ToString(), out ID);                 }             }         }         return ID;     }       public bool ChangeUser(UserClass user)     {         return ChangeUser(ID: user.UserID, Name: user.Loginname, LanguageID: user.Language.LanguageID, Email: user.Email, SupporterTier: user.SupporterTier);     }       public bool ChangeUser(int ID, string Name, int LanguageID, string Email, Supporter SupporterTier)     {         bool result = false;         if (ID &gt; 0)         {             using (MySqlConnection connect = new MySqlConnection(Base.strConnect))             {                 string sql = \"UPDATE `Users` SET `Loginname`=@Loginname, `LanguageID`=@LanguageID, `Email`=@Email, `SupporterTier`=@SupporterTier WHERE UserID=@UserID\";                 using (MySqlCommand cmd = new MySqlCommand(sql, connect))                 {                     cmd.Parameters.Add(\"UserID\", MySqlDbType.Int32).Value = ID;                     cmd.Parameters.Add(\"Loginname\", MySqlDbType.String).Value = Name;                     cmd.Parameters.Add(\"LanguageID\", MySqlDbType.Int32).Value = LanguageID;                     cmd.Parameters.Add(\"Email\", MySqlDbType.String).Value = Email;                     cmd.Parameters.Add(\"SupporterTier\", MySqlDbType.Int32).Value = SupporterTier;                     connect.Open();                     result = cmd.ExecuteNonQuery() &gt;= 0;                 }             }         }         return result;     }       public bool RemoveUser(UserClass user)     {         return RemoveUser(user.UserID);     }       public bool RemoveUser(int ID)     {         using (MySqlConnection connect = new MySqlConnection(Base.strConnect))         {             string sql = \"DELETE FROM `Users` WHERE `UserID`=@UserID\";             using (MySqlCommand cmd = new MySqlCommand(sql, connect))             {                 cmd.Parameters.Add(\"UserID\", MySqlDbType.Int32).Value = ID;                 connect.Open();                 return cmd.ExecuteNonQuery() &gt;= 0;             }         }     }       public UserClass FetchByID(int ID)     {         UserClass user = null;         using (MySqlConnection objConnect = new MySqlConnection(Base.strConnect))         {             string strSQL = \"SELECT u.`UserID`, u.`Loginname`, l.`LanguageID`, l.`LanguageName`, u.`Email`, u.`LastLoginDate`, CAST(u.`SupporterTier` AS UNSIGNED) as `SupporterTier` FROM `Users` u LEFT JOIN `Languages` l ON l.LanguageID=u.LanguageID WHERE `UserID`=@UserID\";             using (MySqlCommand cmd = new MySqlCommand(strSQL, objConnect))             {                 objConnect.Open();                 int UserID = 0, LanguageID = 0;                 string Loginname = null, LanguageName= null, Email = String.Empty;                 Supporter SupporterTier = Supporter.None;                 DateTime? LastLoginDate = null;                 cmd.Parameters.Add(\"UserID\", MySqlDbType.Int32).Value = ID;                 using (MySqlDataReader dr = cmd.ExecuteReader())                 {                     if (dr.Read())                     {                         UserID = dr.GetInt32(\"UserID\");                         Loginname = dr.GetString(\"Loginname\").ToString();                         LanguageID = dr.GetInt32(\"LanguageID\");                         LanguageName = dr.GetString(\"LanguageName\").ToString();                         if (!dr.IsDBNull(dr.GetOrdinal(\"Email\"))) Email = dr.GetString(\"Email\").ToString();                         if (!dr.IsDBNull(dr.GetOrdinal(\"LastLoginDate\"))) LastLoginDate = dr.GetDateTime(\"LastLoginDate\");                         if (!dr.IsDBNull(dr.GetOrdinal(\"SupporterTier\"))) SupporterTier = (Supporter)dr.GetInt32(\"SupporterTier\");                     }                     LanguageClass language = null;                     if (LanguageID &gt; 0) language = new LanguageClass(LanguageID: LanguageID, LanguageName: LanguageName);                     if (UserID &gt; 0 &amp;&amp; language != null &amp;&amp; language.LanguageID &gt; 0) user = new UserClass(UserID: UserID, Loginname: Loginname, Language: language, Email: Email, LastLoginDate: LastLoginDate, SupporterTier: (Supporter)SupporterTier);                 }             }         }         return user;     }       \/\/ \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f ASP.NET WebForms, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0432 ObjectDataSource \u0431\u0435\u0437 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438     \/\/ \u041d\u043e \u0442\u0430\u043a \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u044b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \"\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438\" \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445     \/\/public IEnumerable&lt;DataRow&gt; List()     \/\/{     \/\/    using (MySqlConnection objConnect = new MySqlConnection(Base.strConnect))     \/\/    {     \/\/        string strSQL = \"select * from users\";     \/\/        using (MySqlCommand objCommand = new MySqlCommand(strSQL, objConnect))     \/\/        {     \/\/            objConnect.Open();     \/\/            using (MySqlDataAdapter da = new MySqlDataAdapter(objCommand))     \/\/            {     \/\/                DataTable dt = new DataTable();     \/\/                da.Fill(dt);     \/\/                return dt.AsEnumerable();     \/\/            }     \/\/        }     \/\/    }     \/\/}       public IList&lt;UserClass&gt; List(string sortOrder, System.Web.Helpers.SortDirection sortDir, int page, int pagesize, out int count)     {         List&lt;UserClass&gt; users = new List&lt;UserClass&gt;();         using (MySqlConnection objConnect = new MySqlConnection(Base.strConnect))         {             \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443             string sort = \" ORDER BY \";             \/\/ \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0437\u043b\u043e\u043c\u0430\u043d \u043f\u0440\u0438 \u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u0432 \u043d\u0435\u0433\u043e \u043d\u0435\u043a\u043e\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (inject)             \/\/ \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, MySQL \u043d\u0435 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438             \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u043c\u0438, \u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0447\u0442\u043e\u0431\u044b \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0432\u044b\u0447\u0435\u043a \u0432 \u043d\u0451\u043c \u043d\u0435 \u0431\u044b\u043b\u043e)             \/\/ \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0434\u0435\u0442 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435, \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438             if (sortOrder != null &amp;&amp; sortOrder != String.Empty)             {                 sort += \"`\" + sortOrder + \"`\";                 if (sortDir == System.Web.Helpers.SortDirection.Descending) sort += \" DESC\";                 sort += \",\";             }             sort += \"`UserID`\"; \/\/ \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e             \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438)             string limit = \"\";             if (pagesize &gt; 0)             {                 int start = (page - 1) * pagesize;                 limit = string.Concat(\" LIMIT \", start.ToString(), \", \", pagesize.ToString());             }             string strSQL = \"SELECT SQL_CALC_FOUND_ROWS u.`UserID`, u.`Loginname`, l.`LanguageID`, l.`LanguageName` as `Language`, u.`Email`, u.`LastLoginDate`, CAST(u.`SupporterTier` AS UNSIGNED) as `SupporterTier` FROM `Users` u LEFT JOIN `Languages` l ON l.LanguageID=u.LanguageID\" + sort + limit;             using (MySqlCommand cmd = new MySqlCommand(strSQL, objConnect))             {                 objConnect.Open();                 cmd.Parameters.Add(\"page\", MySqlDbType.Int32).Value = page;                 cmd.Parameters.Add(\"pagesize\", MySqlDbType.Int32).Value = pagesize;                 using (MySqlDataReader dr = cmd.ExecuteReader())                 {                     while (dr.Read())                     {                         LanguageClass language = new LanguageClass(LanguageID: dr.GetInt32(\"LanguageID\"), LanguageName: dr.GetString(\"Language\").ToString());                           users.Add(new UserClass(                             UserID: dr.GetInt32(\"UserID\"),                              Loginname: dr.GetString(\"Loginname\"),                              Language: language,                             Email: dr.IsDBNull(dr.GetOrdinal(\"Email\")) ? String.Empty : dr.GetString(\"Email\"),                              LastLoginDate: dr.IsDBNull(dr.GetOrdinal(\"LastLoginDate\")) ? (DateTime?) null : dr.GetDateTime(\"LastLoginDate\"),                              SupporterTier: dr.IsDBNull(dr.GetOrdinal(\"SupporterTier\")) ? (Supporter) Supporter.None : (Supporter)dr.GetInt32(\"SupporterTier\")));                     }                 }             }             using (MySqlCommand cmdrows = new MySqlCommand(\"SELECT FOUND_ROWS()\", objConnect))             {                 int.TryParse(cmdrows.ExecuteScalar().ToString(), out count);             }         }         return users;     } }<\/code><\/pre>\n<p>  \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434 <code>AddUser<\/code> \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (<code>ChangeUser<\/code>), \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f (<code>RemoveUser<\/code>), \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (<code>FetchByID<\/code>) \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>List<\/code> \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>List<\/code>:<\/p>\n<ol>\n<li>\u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (<code>DataTable<\/code>), \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u0443\u044e \u2013 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u043c \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u044b \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0422.\u0435. \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <code>UserClass<\/code>.<\/li>\n<li>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a \u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>LIMIT<\/code> \u0432 SQL-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 <code>SELECT<\/code>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 MySQL \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>LIMIT<\/code> \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443. \u041d\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0431\u0435\u0434\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u0432\u043e\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>ORDER BY<\/code> \u0443\u0436\u0435 \u0447\u0440\u0435\u0432\u0430\u0442\u0430 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0432 \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0435\u043a\u0438\u0439 SQL-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0440\u0432\u0435\u0442 \u043d\u0430\u0448\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 SQL \u0442\u043e\u0447\u043a\u043e\u0439 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0443\u0436\u0435 \u0435\u0433\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438 \u0447\u0438\u0441\u0442\u043a\u0430 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443 \u043d\u0430\u0441 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043c\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0443\u0436\u0435 \u0434\u0432\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438\u0434\u0451\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 \u0411\u0414 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0451 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 SQL \u0432\u0438\u0434\u0430 <code>SELECT FOUND_ROWS()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u043c \u0434\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>SELECT SQL_CALC_FOUND_ROWS<\/code> \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432 <code>LIMIT<\/code>.<\/li>\n<\/ol>\n<p>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u0448\u0435 \u043a\u0430\u043d\u043e\u043d\u0443.<\/p>\n<p>  \u0418 \u0444\u0430\u0439\u043b <i>LanguageRepository.cs<\/i> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <i>Models<\/i>:<\/p>\n<pre><code class=\"cpp\">public class LanguagesRepository {     public IList&lt;LanguageClass&gt; List()     {         List&lt;LanguageClass&gt; languages = new List&lt;LanguageClass&gt;();         using (MySqlConnection objConnect = new MySqlConnection(Base.strConnect))         {             string strSQL = \"SELECT `LanguageID`, `LanguageName` as `Language` FROM `Languages` ORDER BY `LanguageName`\";             using (MySqlCommand cmd = new MySqlCommand(strSQL, objConnect))             {                 objConnect.Open();                 using (MySqlDataReader dr = cmd.ExecuteReader())                 {                     while (dr.Read())                     {                         LanguageClass language = new LanguageClass(LanguageID: dr.GetInt32(\"LanguageID\"), LanguageName: dr.GetString(\"Language\").ToString());                         languages.Add(language);                     }                 }             }         }         return languages;     } }<\/code><\/pre>\n<p>  \u0412 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u044f\u0437\u044b\u043a\u043e\u0432 \u0438\u0437 \u0411\u0414, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <code>LanguageClass<\/code>.<\/p>\n<h2>\u0418\u0442\u043e\u0433\u043e<\/h2>\n<p>  \u0412\u043e\u0442 \u0438 \u0432\u0441\u0451 \u2013 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0435\u043d\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u0438 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043c\u043e\u043a\u0438\u043d\u0433\u0430, \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0442.\u0434. \u0438 \u0442.\u043f. \u041a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u0435\u0449\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0443\u0447\u0448\u0435. \u041d\u043e \u00ab\u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u00bb \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f, \u0432\u044b\u0448\u0435\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0446\u0435\u043b\u044c\u043d\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ASP.NET MVC \u0438 \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 ADO.NET \u0438 \u0441 \u0421\u0423\u0411\u0414, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 MS SQL.<\/p>\n<p>  P.S. \u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a: \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e <a href=\"http:\/\/example-mvc.azurewebsites.net\/\">\u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443<\/a>. \u0410 <a href=\"https:\/\/yadi.sk\/d\/EArrZdGh_iVaJg\">\u0432\u043e\u0442 \u0442\u0443\u0442<\/a> \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u0443 \u0438 \u0434\u043e \u043a\u0443\u0447\u0438 \u2014 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <a href=\"https:\/\/dukeyusupov.wordpress.com\/\">\u043c\u043e\u0439 \u0431\u043b\u043e\u0433<\/a>.<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d() } } }t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>      <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/482346\/\"> https:\/\/habr.com\/ru\/post\/482346\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/482346\/\">\u0423\u0436\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0440\u0430\u0437\u0430 \u0442\u0440\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043a ASP.NET MVC. \u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442 \u0441 ASP.NET WebForms \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 MVC, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 \u044d\u0442\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043e\u0431\u0449\u0435\u0433\u043e \u2013 \u044d\u0442\u043e \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 .NET Framework. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0443\u0442 \u2013 \u043b\u0443\u0447\u0448\u0435 \u0438\u043b\u0438 \u0445\u0443\u0436\u0435 MVC \u0447\u0435\u043c WebForms, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043d\u0438 \u043e\u0431\u0435 \u0445\u043e\u0440\u043e\u0448\u0438, \u0438 \u043d\u0430 \u043e\u0431\u0435\u0438\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u0432\u043e\u0438 \u043c\u044b\u0441\u043b\u0438 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 TDD \u044f \u0442\u043e\u0436\u0435 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043f\u0440\u0438 \u0441\u0435\u0431\u0435, \u0445\u043e\u0442\u044f \u0438\u0445 \u0435\u0441\u0442\u044c \u0443 \u043c\u0435\u043d\u044f.<\/p>\n<p>  \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0435\u0439\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u2013 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438: \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CRUD). \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u043d\u0438\u0433\u0430\u0445 \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0434\u043b\u044f ASP.NET MVC \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 ORM (Object Relation Mapping): \u0438\u043b\u0438 Entity Framework (EF) \u0438\u043b\u0438 LINQ \u0434\u043b\u044f SQL. \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435, \u0441\u043f\u043e\u0440\u0443 \u043d\u0435\u0442, \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u2013 \u0430 \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0421\u0423\u0411\u0414 (\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f) \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0434\u0430\u0436\u0435 SQL, \u043f\u043e \u0438\u0434\u0435\u0435, \u0437\u043d\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u043a\u0430 \u0432 \u0432\u0438\u0434\u0435 EF \u0438 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0421\u0423\u0411\u0414 \u0440\u0430\u0437\u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u00ab\u0412\u043e\u0442 \u043e\u043d\u043e \u0441\u0447\u0430\u0441\u0442\u044c\u0435 \u2013 \u043d\u0435\u0442 \u0435\u0433\u043e \u043a\u0440\u0430\u0448\u0435\u00bb. \u041d\u043e \u0442\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0431\u043e\u044f\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c ADO.NET, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u2013 \u0430 \u0441 \u0447\u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0432 ASP.NET MVC \u0438 \u043d\u0430\u0434\u043e \u043b\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-296554","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=296554"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296554\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=296554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=296554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=296554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}