рд╡рд┐рд░рд╛рд╕рдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреАрдЪреЗрддрд╛рд╡рдиреА: ASP.NET MVC рджреЛрдиреЛрдВ рдкрджрд╛рд╡рдирдд рд╣реИрдВ рдФрд░ ADO.NET рднреАред рдЖрдзреБрдирд┐рдХ ORM рдХреЗ рд╕рд╛рде ASP.NET рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкрдврд╝реЗрдВред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА, рд╢рд╛рдпрдж, рддреАрди рдмрд╛рд░ рдореИрдВ ASP.NET MVC рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред ASP.NET WebForms рдХреЗ рд╕рд╛рде рджрд╕ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж, MVC рддрдХрдиреАрдХ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдВрддрд░ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЗрди рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╛рдирддрд╛ рд╣реИ - .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдореИрдВ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ - рдПрдорд╡реАрд╕реА рд╡реЗрдмрдлрд╛рд░реНрдо рд╕реЗ рдмреЗрд╣рддрд░ рдпрд╛ рдмрджрддрд░ рд╣реИ, рд╡реЗ рджреЛрдиреЛрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рджреЛрдиреЛрдВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЕрдкрдиреЗ рд╕рд╛рде рдЯреАрдбреАрдбреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рднреА рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИред
рдФрд░ рдЕрдм рдореИрдВ рд╕рдмрд╕реЗ рдорд╛рдирдХ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп: рд╕рд╛рд░рдгреАрдмрджреНрдз рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛, рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдирд╛ (рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдмрджрд▓рдирд╛) рдХреА рд╕реВрдЪреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рдЧрднрдЧ рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдФрд░ ASP.NET MVC рдХреЗ рд▓рд┐рдП рдХрдИ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ORM (рдСрдмреНрдЬреЗрдХреНрдЯ рд░рд┐рд▓реЗрд╢рди рдореИрдкрд┐рдВрдЧ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: SQL рдХреЗ рд▓рд┐рдП рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ (EF) рдпрд╛ LINQред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИ, рдЕрдВрдд рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреАрдмреАрдПрдордПрд╕ (рдЬреЛ рд╡рд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ) рдЖрдорддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ: рдИрдПрдл рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдЫрд╛рдиреЗ DBMS рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗред "рдпрд╣рд╛рдБ рдпрд╣ рдЦреБрд╢реА рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реМрдВрджрд░реНрдп рдирд╣реАрдВ рд╣реИред" рд▓реЗрдХрд┐рди рдЙрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЬреЛ ADO.NET рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдЕрдХреНрд╕рд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ ASP.NET MVC рдХреЗ рд╕рд╛рде рдХрд╣рд╛рдВ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рдЧреНрд░рд┐рдб рдЯреЗрдмрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдШрдЯрдХ рдХреА рдХрдореА рдкрд░ рдЬрдВрдЧрд▓реА рдЯреВрдЯрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдХреБрдЫ рдЙрдкрдпреБрдХреНрдд рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк, рдореЗрд░реА рддрд░рд╣, ASP.NET WebForms рдореЗрдВ GridView рдШрдЯрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЦреБрд╢ рдереЗ, рддреЛ MVC рдХреЗ рд▓рд┐рдП, Grid.mvc рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдХреБрдЫ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рддреБрд▓рдиреАрдп рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЗрд╕ рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ (рдХреНрдпрд╛ рдпрд╣ рдЧреБрдгрд╛рддреНрдордХ рд╣реИ?), рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрдм рдФрд░ рдХреИрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХрднреА-рдХрднреА рдШрдЯрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЖрдЧреЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрджрдиреЗ рдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдШрдЯрдХ рдЕрдкрдбреЗрдЯ рдХреЛ рдлреНрд░реАрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдбреЗрд╡рд▓рдкрд░ рдПрдХ рднреЗрджреНрдпрддрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ MySQL рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдбрд╝реА рдХрдВрдкрдиреА рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдиреБрдЧреЗрдЯ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдХрдИ "рдмрд╛рдЗрдХ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ?
рдЗрд╕рд▓рд┐рдП, MySQL DBMS рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, ASP.NET MVC рдХреЗ рддрд╣рдд рд▓рд┐рдЦрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рдЗрд╕ рдкрддреЗ рдкрд░ рд╕рднреА рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдиреАрдЪреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдЫреЛрдЯреЗ рд▓рд┐рдВрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░
рдпрд╣рд╛рдВ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
MySQL рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ
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;
рдбреЗрдЯрд╛рдмреЗрд╕ (DB) рд╕рд░рд▓ рдФрд░ рдХреЗрд╡рд▓ рджреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рдирдХреЗ рд╕рд╛рде
LanguageID
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз рд╣реЛрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо
SupporterTier
рдХреНрд╖реЗрддреНрд░ рднреА рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдирдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорд░реНрдерди рдХреЗ рд╕реНрддрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо тАЬрджрд┐рдирд╛рдВрдХ / рд╕рдордптАЭ рдкреНрд░рдХрд╛рд░ рдХреЗ
LastLoginDate
рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╣реА рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ

"MVC" рдЪреБрдиреЗрдВред "рдЦрд╛рд▓реА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╣реИ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛, рддреБрд░рдВрдд рдорджрдж рдХрд░реЗрдЧрд╛, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдФрд░ JQuery рдХреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░реЗрдЧрд╛ред

рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд░реЗ рд╣реБрдП
рдХрдВрдЯреЗрдВрдЯ ,
рдлреЛрдВрдЯ ,
рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдлреЛрд▓реНрдбрд░, рд╕рд╛рде рд╣реА рд╕рд╛рде ASP.NET MVC рдмрдВрдбрд▓реЛрдВ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдкрдВрдЬреАрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде
App_Start рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
FilesConfig.cs рдФрд░
FilterConfig.cs рдлрд╛рдЗрд▓реЗрдВ рднрд░реА рд╣реБрдИ рд╣реИрдВ ред рдХрд┐рд╕реА рд░рд┐рдХреНрдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ,
рд░реВрдЯрдХреЙрдиреНрдлрд╝рд┐рдЧ.рдПрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг
рд╣реЛрддрд╛ рд╣реИред
Global.asax.cs рдореЗрдВ, рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛:
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles);
рд╣рдордиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдФрд░ рдкреВрд░реЗ рдмрдВрдбрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА
MySQL DBMS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
MySql.Data рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛрдбрд╝реЗрдВ: рдпрд╛ рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ, рдЕрдЧрд░
mysql-рдХрдиреЗрдХреНрдЯрд░-net-8.0.18 рдХрдиреЗрдХреНрдЯрд░ рдкрд╣рд▓реЗ
рд╕реЗ рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдпрд╛ Nuget рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╕реЗ:

рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ
Web.config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ MySQL DBMS рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
<connectionStrings> <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" /> </connectionStrings>
рдЬреЛрдбрд╝реЗ рдЧрдП рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде
<appSettings>
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
<add key="ConnectionString" value="example" />
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдирдИ
рдбреЛрдореЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рд╣рдо рдПрдХ рдирдпрд╛ рд╕реНрдЯреИрдЯрд┐рдХ
Base
рдХреНрд▓рд╛рд╕ (
рдмреЗрд╕.рдПрд╕рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ)
рдмрдирд╛рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ:
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; } } }
рдореИрдВ рдЖрд╡реЗрджрди рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдХреБрдЫ рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдирд╛рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ DBMS рдХреЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдП: рдЬрд▓реНрджреА рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Microsoft Azure рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рд╡рд╣рд╛рдВ рдЖрдк рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ
<connectionStrings>
рдореЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред рдлрд┐рд░, рдЬрдм рдкреНрд░рдХрд╛рд╢рди, рдЖрдк
web.config рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдореБрдЭреЗ рдкрд╛рда рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдкреГрд╖реНрда рд▓реЗрдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
_Layout.cshtml (рдпрд╣ рдорд╛рдирдХ рд░реВрдк рд╕реЗ
рджреГрд╢реНрдп \ рд╕рд╛рдЭрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЕрдм рдЖрдк рдЗрди рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Example_Users.Properties.Resources.Title
рджреЗрдЦреЗрдВред
Example_Users.Properties.Resources.Title
):
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title тАУ @Example_Users.Properties.Resources.Title</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="container body-content"> <h1 class="page-header"><a href="/">@Example_Users.Properties.Resources.Title</a></h1> @RenderBody() <hr /> <footer> <p> @DateTime.Now.Year тАУ @Example_Users.Properties.Resources.Author</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд╣рдореЗрдВ рдХрдиреЗрдХреНрдЯреЗрдб рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдФрд░ JQuery рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рдХрд╛ рд▓рдЧрд╛рд╡ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдХреЙрд▓
RenderBody()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рджреГрд╢реНрдпреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдПрдЧреАред
рдПрдо рдХрд╛ рдорддрд▓рдм рдореЙрдбрд▓ рд╣реИ
рдбреЛрдореЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓
UserClass.cs рдЬреЛрдбрд╝реЗрдВ:
[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 && LastLoginDate > 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 }
рдФрд░ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
LanguageClass.cs рдлрд╝рд╛рдЗрд▓ рднреА:
[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; } }
рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЧреБрдг DBMS рдореЗрдВ
Users
рдФрд░
Languages
рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред рдЧрдгрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ
enum Supporter
рдмрдирд╛рдпрд╛
enum Supporter
рддрд╛рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХреНрд╖реЗрддреНрд░ рдХреЗ
SupporterTier
рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
UserID
,
LanguageID
рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддрд░рд╣ рд╣реА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред
[Key]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдФрд░ рдЕрдЧрд░ рд╣рдо рдЗрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП HTML рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ (рдЬреЛ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдЭрд╛рдКрдВрдЧрд╛), рддреЛ рд╣рдореЗрдВ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдБ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:
[DisplayName]
- рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП Html.DisplayNameForModel
рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЛрдбрд╝рд╛редName
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде [Display]
- рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧреА рдСрд░реНрдбрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рд╣рд╛рдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдСрд░реНрдбрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХреНрд▓рд╛рд╕ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред[HiddenInput]
DisplayValue
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╛ рддреЛ рд╕рднреА рд░реВрдкреЛрдВ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ ( DisplayValue=false
, hidden
рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде input
рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ), рдпрд╛ рдЙрди рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкрд╛рда ( DisplayValue=true
, рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╣реИред рд╕реНрд╡рдЪреНрдЫ рдкрд╛рда рдХреА рддрд░рд╣, рдЯреИрдЧ рдХреЗ рдмрд┐рдирд╛)[ScaffoldColumn]
- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрд╛рджрди Html.EditorForModel
рдореЗрдВ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Html.EditorForModel
)ред рдпрджрд┐ false
, рддреЛ рди рддреЛ рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рди рд╣реА рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред [HiddenInput(DisplayValue = false)]
рдЙрдкрдпреЛрдЧ [HiddenInput(DisplayValue = false)]
рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ [HiddenInput(DisplayValue = false)]
, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рди рдХреЗрд╡рд▓ рд╕реВрдЪрдирд╛ рдЗрдирдкреБрдЯ рд░реВрдкреЛрдВ рдореЗрдВ, рдмрд▓реНрдХрд┐ рдЯреЗрдмрд▓ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, LastLoginDate
рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред[Required]
- рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдХреНрд▓рд╛рд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореВрд▓реНрдп рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрд░рд░ AllowEmptyStrings
рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдПрд░рд░ рдореИрд╕реЗрдЬ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ AllowEmptyStrings
рдкреНрд░реЙрдкрд░реНрдЯреА AllowEmptyStrings
рдЖрдкрдХреЛ рд░рд┐рдХреНрдд рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред[EmailAddress]
- рдбрд╛рдХ рдкрддреЗ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рддреИрдпрд╛рд░ рд╣реИрдВ, рд╣рдо рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреА рдУрд░ рд░реБрдЦ рдХрд░рддреЗ рд╣реИрдВ (рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓реЛрдВ рдХреЗ рд╡рд░реНрдЧ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ)ред
рд╡реА - рдХрд╛ рдЕрд░реНрде рд╣реИ рдкреНрд░рддрд┐рд╢реЛрдз рдкреНрд░рджрд░реНрд╢рди
рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВред рд╣рдорд╛рд░реЗ рд╕рднреА рджреГрд╢реНрдп рдорд╛рдирдХ (
рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
_ViewStart.cshtml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд) рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ,
рджреГрд╢реНрдп \ рд╕рд╛рдЭрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд
_Layout.cshtml рд▓реЗрдЖрдЙрдЯред рдПрдХ
Index
рджреГрд╢реНрдп (
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
Index.cshtml рдлрд╝рд╛рдЗрд▓) рдмрдирд╛рдПрдБ:

рдФрд░ рдХреЛрдб рд▓рд┐рдЦреЗрдВ:
@model Example_Users.Models.UsersGrid @{ ViewBag.Title = "Users page"; } @using (@Html.BeginForm()) { <div> <h3>Users list:</h3> @if (TempData["message"] != null) {<div class="text-success">@TempData["message"]</div>} @if (TempData["error"] != null) {<div class="text-warning"><span class="alert">ERROR:</span> @TempData["error"]</div>} @Html.Partial("List") <p> <input type="submit" name="onNewUser" value="New user" /> @*@Html.ActionLink("New user", "New", "Users")*@ </p> </div> }
рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреГрд╢реНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рд╣реЛ, рддреЛ
рдорд╛рд░реНрдЧ рдореЗрдВ
Default
рд╕реЗ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ
редConfig.cs рдлрд╝рд╛рдЗрд▓:
routes.MapRoute(name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Users", action = "Index", id = UrlParameter.Optional });
рджреГрд╢реНрдп рдореЗрдВ рд╣реА, рдЖрдкрдХреЛ
Html.Partial("List")
рд╕рд╛рде рд▓рд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдЬрдЧрд╣ рдХреЛ
рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрд▓рдЧ рд╕рд╛рдорд╛рдиреНрдп рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп
рд╡реНрдпреВ.рд╢рд░реНрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ
рд▓рд┐рд╕реНрдЯ.рд╕реА.рдЯреАрдЯреАрдПрдордПрд▓ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ
users
рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд┐рдб рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:
@model Example_Users.Models.UsersGrid @using Example_Users.Domain <div class="table-responsive"> <table class="table table-bordered table-hover"> <thead> <tr> <th>@Html.ActionLink(Html.DisplayNameFor(m => Model.Users.First().Loginname).ToString(), "Index", Request.QueryString.ToRouteValueDictionary("sortOrder", Model.SortingInfo.NewOrder(Html.NameFor(m => Model.Users.First().Loginname).ToString()))) @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m => Model.Users.First().Loginname).ToString()) </th> <th>@Html.ActionLink(Html.DisplayNameFor(m => Model.Users.First().Language.LanguageName).ToString(), "Index", Request.QueryString.ToRouteValueDictionary("sortOrder", Model.SortingInfo.NewOrder(Html.NameFor(m => Model.Users.First().Language).ToString()))) @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m => Model.Users.First().Language).ToString()) </th> <th>@Html.ActionLink(Html.DisplayNameFor(m => Model.Users.First().Email).ToString(), "Index", Request.QueryString.ToRouteValueDictionary("sortOrder", Model.SortingInfo.NewOrder(Html.NameFor(m => Model.Users.First().Email).ToString()))) @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m => Model.Users.First().Email).ToString()) </th> <th>@Html.ActionLink(Html.DisplayNameFor(m => Model.Users.First().SupporterTier).ToString(), "Index", Request.QueryString.ToRouteValueDictionary("sortOrder", Model.SortingInfo.NewOrder(Html.NameFor(m => Model.Users.First().SupporterTier).ToString()))) @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m => Model.Users.First().SupporterTier).ToString()) </th> <th>@Html.ActionLink(Html.DisplayNameFor(m => Model.Users.First().LastLoginDate).ToString(), "Index", Request.QueryString.ToRouteValueDictionary("sortOrder", Model.SortingInfo.NewOrder(Html.NameFor(m => Model.Users.First().LastLoginDate).ToString()))) @Html.SortIdentifier(Model.SortingInfo.currentSort, Html.NameFor(m => Model.Users.First().LastLoginDate).ToString()) </th> </tr> </thead> <tbody> @foreach (var item in Model.Users) { <tr> <td>@Html.ActionLink(item.Loginname, "Edit", "Users", new { UserID = item.UserID }, null)</td> <td>@Html.DisplayFor(modelitem => item.Language.LanguageName)</td> <td>@Html.DisplayFor(modelitem => item.Email)</td> <td class="@Html.DisplayFor(modelitem => item.SupporterTier)">@if (item.SupporterTier != Supporter.None) {@Html.DisplayFor(modelitem => item.SupporterTier);}</td> <td>@if (item.IsLastLogin) {@Html.DisplayFor(modelitem => item.LastLoginDate)}</td> </tr> } </tbody> </table> </div> @if (Model.PagingInfo.totalPages > 1) { <ul class="pagination"> @Html.PageLinks(Model.PagingInfo, x => Url.Action("Index", new { page = x, sortOrder = Model.SortingInfo.currentSort })) </ul> }
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЯреЗрдмрд▓ рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ, рд╕реНрддрдВрднреЛрдВ рдХреЗ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
Html.DisplayNameFor
рдХрд╛
Html.DisplayNameFor
рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЯреЗрдмрд▓ рдЯрд╛рдЗрдЯрд▓ рдмрдирд╛рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ
Model.Users
рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐
UserClass
рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
UserClass
рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд▓рд┐рдП:
Model.Users.First().Loginname
ред рдЪреВрдВрдХрд┐
Users
рд╡рд░реНрдЧ рдХреА
Loginname
рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ
[Display(Name = "Login")]
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдпрд╣ рдХреЙрд▓рдо рдирд╛рдо рдореЗрдВ "рд▓реЙрдЧрд┐рди" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

List
рджреГрд╢реНрдп рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ?
UserClass
рдмреНрд▓реЙрдХ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ,
Users
рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд
Users
рд╕реВрдЪреА рдореЗрдВ рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реЗ
UsersGrid
рдореЙрдбрд▓ рдореЗрдВ
SortingInfo
рдФрд░
PagingInfo
рдпрд╣рд╛рдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдФрд░ рд╣рдореЗрдВ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдбреЗрдЯрд╛ рд╕реЙрд░реНрдЯрд┐рдВрдЧ (рддрд╛рд▓рд┐рдХрд╛ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд
<th>
рдЯреИрдЧреНрд╕) рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реВрдЪрдирд╛ рдХреЗ рдкреГрд╖реНрдард╛рдВрдХрди (рдкреЗрдЬ рдХреЗ рдиреАрдЪреЗ, рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдиреАрдЪреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реАрд▓рд┐рдП рд╣рдо рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
IEnumerable<UserClass>
рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╢реБрджреНрдз рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдПрдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо
UsersGrid
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ
ModelGrid.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
рдореЙрдбрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
public class UsersGrid { public IEnumerable<UserClass> Users { get; set; } public PagingInfo PagingInfo { get; set; } public SortingInfo SortingInfo { get; set; } }
рдФрд░
PagingInfo
рдФрд░
SortingInfo
рдЦреБрдж рдХреЛ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░
GridInfo.cs
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
GridInfo.cs
рдХрд░рддрд╛ рд╣реИред
public class PagingInfo {
рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ
GridHelpers.cs рдлрд╝рд╛рдЗрд▓ (
HtmlHelpers рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:
public static class GridHelpers {
рдЪреВрдВрдХрд┐ рдмрд┐рдирд╛ рд╕реВрдЪрдирд╛ рдЫрд╛рдВрдЯреЗ рдФрд░ рдмрд┐рдирд╛ рд╕реВрдЪрдирд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреНрд░рд┐рдб рдПрдХ рдмреЗрдХрд╛рд░ рдЪреАрдЬ рд╣реИ, рдФрд░ ASP.NET MVC рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдирдХ рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ ASP.NET MVC рдкреБрд╕реНрддрдХреЛрдВ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рд╕реВрд╕реА рдХреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╕рдорд╛рдзрд╛рди рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдбреЗрдЯрд╛ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдФрд░ рдкреЗрдЬрд┐рдВрдЧ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдЗрд╕ рдкреВрд░реА рдмрд╛рдд рдХреЛ рд╕рдордЭрдирд╛ рдерд╛, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рдкреГрд╖реНрдард╛рдВрдХрди рдЕрдХреНрд╕рд░ рдкреГрд╖реНрдареЛрдВ рдХреА рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд▓рдВрдмреА рд╕реВрдЪреА рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдХрдИ рд╣рдЬрд╛рд░ рдкреГрд╖реНрда рд╣реЛрдВрдЧреЗ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдореИрдВ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:

рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ

рдФрд░ рд╡реНрдпреВ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
@model Example_Users.Models.UserModel @{ ViewBag.Title = "New " + Html.DisplayNameForModel().ToString().ToLower(); } <h2>@ViewBag.Title</h2> @using (@Html.BeginForm("New", "Users", FormMethod.Post)) { @Html.EditorFor(m => m.User); @Html.LabelFor(m => Model.User.Language)<br /> @Html.DropDownListFor(m => Model.User.Language.LanguageID, Model.SelectLanguages()) <span/>@Html.ValidationMessageFor(m => Model.User.Language.LanguageID)<br /> <br /> <p><input type="submit" name="action" value="Add" /> <input type="button" onclick="history.go(-1)" value="Cancel" /></p> @*<p>@Html.ActionLink("Back to list", "Index")</p>*@ }
рдпрд╣ рджреГрд╢реНрдп рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
UserClass
рд╡рд░реНрдЧ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ
Html.EditorFor
рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдпрд╣ рджреГрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
UserModel
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдирд╛ рдХрд┐ рд╕реАрдзреЗ
UserClass
ред
UserModel
рд╡рд░реНрдЧ рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ
UserModel.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
public class UserModel { public UserClass User { get; set; } private IList<LanguageClass> Languages { get; set; } public UserModel() {} public UserModel(UserClass user, IList<LanguageClass> languages) { this.User = user; this.Languages = languages; } public IEnumerable<SelectListItem> SelectLanguages() { if (Languages != null) { return new SelectList(Languages, "LanguageID", "LanguageName"); } return null; } }
UserClass
рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рдФрд░
UserClass
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реВрдЪреА рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓
LanguageClass
ред рд╣рдореЗрдВ рднрд╛рд╖рд╛рдУрдВ рдХреА рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрд╛рд╖рд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
@Html.DropDownListFor(m => Model.User.Language.LanguageID, Model.SelectLanguages(), "")
рдпрд╣ рд╕рд╣рд╛рдпрдХ рдХреЙрд▓ рдХреЛ
SelectLanguages()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рднрд╛рд╖рд╛ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд▓рд╛рдЗрди рдирд╛рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде
SelectList
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ
SelectList
ред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкреАрдврд╝реА рдХреЛ рджреГрд╢реНрдп рдореЗрдВ рд░рдЦрдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ред
SelectList
, рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕реАрдзреЗ рддреИрдпрд╛рд░
SelectList
рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдбреЛрдореЗрди рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдирд┐рдЬреА рд╕реВрдЪреА рдФрд░ рдЕрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рд╣реИред
рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ
Html.EditorFor(m => m.User)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
Html.EditorFor(m => m.User)
рд╣реЗрд▓реНрдкрд░ рдЯрд╛рдЗрдк
LanguageClass
рдХреА рдПрдореНрдмреЗрдбреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдбрд┐рдЯрд┐рдВрдЧ рдорд╛рд░реНрдХрдЕрдк рдирд╣реАрдВ
Html.EditorFor(m => m.User)
(рдпрд╣ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦрдХрд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рд╣реИрдВред рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ ...)ред
рдФрд░ рдЬрдм рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ
UserModel
рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ
UserClass
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╣рдо
Html.EditorForModel()
рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣рд╛рдпрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП
Html.EditorFor()
рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Html.EditorFor()
User
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдПред
рдореИрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд┐рдП рдЧрдП рдЯреИрдЧ Html.ActionLink("Back to list", "Index")
рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдЖрдорддреМрд░ рдкрд░, рдбреЗрдЯрд╛ рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рд╕реЗ рд╡рд╛рдкрд╕реА рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ - рдЬрдм рдЖрдк рдПрдХ рдлреЙрд░реНрдо рдореЗрдВ рдЯрд╛рдЗрдк рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ button
, рдФрд░ рд░рд┐рдЯрд░реНрди рдмрдЯрди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд┐рд╕реА рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ, рдЕрдЧрд░ рд╣рдо рдЫрдБрдЯрд╛рдИ рдФрд░ рдкреГрд╖реНрдард╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рддреЛ рд╣рдореЗрдВ рдЙрд╕реА рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд╕рд╛рде рдмреБрджреНрдзрд┐рдорд╛рди рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ - рдФрд░ рди рдХреЗрд╡рд▓ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ UserClass
, рдмрд▓реНрдХрд┐ рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рднреАред рдмрд╣реБрдд рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ - рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ:/>
, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрд┐рд╣рд╛рд╕ рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрдЧрд╛ред рдпрд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм - рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рджреНрдж рдмрдЯрди рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИредрдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг UserClass
:
рдФрд░ рдЙрд╕рдХрд╛ рдХреЛрдб: @model Example_Users.Models.UserModel @{ ViewBag.Title = "Edit " + Html.DisplayNameForModel().ToString().ToLower(); } <h2>@ViewBag.Title @Model.User.Loginname</h2> @using (@Html.BeginForm("Edit", "Users", FormMethod.Post)) { @Html.HiddenFor(m => Model.User.UserID) <div> @Html.LabelFor(m => Model.User.Loginname) @Html.EditorFor(m => Model.User.Loginname) @Html.ValidationMessageFor(m => Model.User.Loginname) </div> <div> @Html.LabelFor(m => Model.User.Language) @Html.DropDownListFor(m => Model.User.Language.LanguageID, Model.SelectLanguages()) @Html.ValidationMessageFor(m => Model.User.Language.LanguageID) </div> <div> @Html.LabelFor(m => Model.User.Email) @Html.EditorFor(m => Model.User.Email) @Html.ValidationMessageFor(m => Model.User.Email) </div> <div> @Html.LabelFor(m => Model.User.SupporterTier) @Html.EditorFor(m => Model.User.SupporterTier) @*@Html.EnumDropDownListFor(m => Model.User.SupporterTier)*@ @*@Html.DropDownListFor(m => m.Model.User.SupporterTier, new SelectList(Enum.GetNames(typeof(Example_Users.Domain.Supporter))))*@ @Html.ValidationMessageFor(m => Model.User.SupporterTier) </div> <br /> <p><input type="submit" name="action" value="Save" /> <input type="submit" name="action" value="Remove" onclick="javascript:return confirm('Are you sure?');" /> <input type="submit" name="action" value="Cancel" /></p> }
рдФрд░ рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ, рдХрд┐рд╕реА рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╣реЗрд▓реНрдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ, рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдФрд░ рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ, рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬреИрд╕реЗ: />
рдЙрд╕реА рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛ рдмрдЯрди ( рд╕рд╣реЗрдЬреЗрдВ , рдирд┐рдХрд╛рд▓реЗрдВ ) рдХреЗ рд░реВрдк />
рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ : рдФрд░ рд░рд┐рдЯрд░реНрди рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрди рдмрдЯрди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдиреАрдЪреЗ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦреЗрдВ)редenum
рдФрд░ рддрдм рдПрдХ рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереА ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ Html.EditorFor()
, рддреЛ рдкрд╛рда рд╕реВрдЪрдирд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб (рдЯрд╛рдЗрдк рдЯреИрдЧ <input type=тАЭtextтАЭ/>
) рдХреЛ рдлреЙрд░реНрдо рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реАрд▓реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛рдиреА <select>
рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреИрдЧ <option>
)ред1. rectilinearly рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Html.DropDownListFor()
рдпрд╛ Html.ListBoxFor()
, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП @Html.DropDownListFor(m => m.Model.User.SupporterTier, new SelectList(Enum.GetNames(typeof(Example_Users.Domain.Supporter))))
ред рджреЛ рдореАрдиреВ рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЗрд╕реЗ рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ Html.EditorForModel()
рдпрд╛ Html.EditorFor()
рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред2. рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рдЯрд╛рдЗрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ Editor
ред Views \ Shared \ EditorTemplates рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Supporter.cshtml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ : @model Example_Users.Domain.Supporter @Html.DropDownListFor(m => m, new SelectList(Enum.GetNames(Model.GetType()), Model.ToString()))
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЯрд╛рдЗрдк рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЖрдкрдХреЛ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ Html.EditorFor(m => Model.SupporterTier)
, рд▓реЗрдХрд┐рди Html.EditorFor(m => Model.SupporterTier, "Supporter")
ред рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ [UIHint("Supporter")]
ред рдФрд░ рдпрд╣ рднреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ Html.EditorForModel()
- рдЗрд╕рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдХрд╛ рд╕рдорд╛рдзрд╛рди Html.EditorFor(m => Model.SupporterTier, "Supporter")
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛редрдореИрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдЬрдм рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рд╢реБрд░реВ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ New
рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП) рдХрд╛рд░реНрдпрдХреНрд░рдо Html.EditorFor()
рдФрд░ Html.EditorForModel()
рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдЧрд┐рд░ рдЧрдИ: " рддрддреНрд╡ рдореЙрдбрд▓ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рд╢реВрдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░┬л Example_Users рдореЙрдбрд▓ред Domain.Supporter ", рдЕрд╢рдХреНрдд рдирд╣реАрдВред┬╗рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рди рд░рд┐рдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╡рд╣ рдЖрдЧреЗ рд╕рдордЭрдиреЗ рд▓рдЧрд╛ред3. рдЖрдк Html.EnumDropDownListFor()
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдХреБрдЫ рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕рдВрдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ "рд▓реЗрдХрд┐рди" рдХреЛ рдЫреЛрдбрд╝рдХрд░: рд╕рд╣рд╛рдпрдХ Html.EditorForModel()
рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ Html.EditorFor()
рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ Html.EnumDropDownListFor()
ред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ, рдпрд╣ рдЧреБрдг рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЧреБрдг рдХреА рдорджрдж рд╕реЗ рдмрдЪрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - [UIHint]
, [DataType]
рдФрд░ [EnumDataType]
рдЙрд╕рдХреЗ рдмрд╛рдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреА, рдЕрд░реНрдерд╛рддреН, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЧрдгрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИSupporter
ред4. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЖрдпрд╛ : рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛ред рджреГрд╢реНрдп \ рд╕рд╛рдЭрд╛ \ EditorTemplates рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ Enum.cshtml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ : @using System.ComponentModel.DataAnnotations @model Enum @{ Func<object, string> GetDisplayName = o => { var result = null as string; var display = o.GetType() .GetMember(o.ToString()).First() .GetCustomAttributes(false) .OfType<DisplayAttribute>() .LastOrDefault(); if (display != null) result = display.GetName(); return result ?? o.ToString(); }; var values = Enum.GetValues(ViewData.ModelMetadata.ModelType).Cast<object>() .Select(v => new SelectListItem { Selected = v.Equals(Model), Text = GetDisplayName(v), // v.ToString(), Value = v.ToString() }); } @Html.DropDownList("", values)
рдпрд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛: рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрд╣рд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реЛ рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк [UIHint("Enum")]
рдЬреЛрдбрд╝ рднреА рдирд╣реАрдВ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ [Display(Name)]
рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрдврд╝рддрд╛ рд╣реИ редC рдХрд╛ рдЕрд░реНрде рд╣реИ рдирд┐рдпрдВрддреНрд░рдХ
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ UsersController.cs рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ ред public class UsersController : Controller { public int pageSize = 10; public int showPages = 15; public int count = 0;
рдЖрдЗрдП рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:1) Index
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ : public ViewResult Index(string sortOrder, int page = 1)
рджреЛ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ sortOrder
рдФрд░ page
ред рд╕рд╛рде page
рд╕рднреА рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ sortOrder
рдкрддрд╛ рдкрдЯреНрдЯреА рд╕реЗ, рдЖрдк рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЬреЛ рд╣рдо рддреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рд░рдЯрдирд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реАрдзреЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдЖрдк рдЗрд╕реЗ рдмреЗрд╕.рдХреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ): sortOrder = Base.parseSortForDB(sortOrder, out sortName, out sortDir);
рдлрд┐рд░ рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реИ, рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ UsersRepository
(рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ), List
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд╕реВрдЪреА рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБUsersGrid
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реВрдЪреА рдФрд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдЫрдБрдЯрд╛рдИ рдХреЗ рдЖрдпреЛрдЬрди рдФрд░ рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, TotalItem рдХрд╛ рдорд╛рди рддрдм рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ List
, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде UsersGrid
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╡рд┐рдзрд┐ рднреА рд╣реИ рдЬрд┐рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ [HttpPost]
рд▓рд┐рдП рд╣рдореЗрдВ рдмрдЯрди рдХреНрд▓рд┐рдХ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ : рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рджреГрд╢реНрдп рдореЗрдВ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЬрдм рд╣рдо рдЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рди рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо null рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЯрд╛рдЗрдк рдмрдЯрди рджреГрд╢реНрдп рдореЗрдВ рд╣реЛрдЧрд╛New
Index
public ActionResult Index(string onNewUser)
onNewUser
/>
Index
submit
Index
рдХрдИ, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреА (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореВрд▓реНрдп "рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рд╣реЛрдЧрд╛)редрдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ UserModel
, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ UserClass
рдФрд░ рднрд╛рд╖рд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ рдЪреБрдирдХрд░ рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬрддреА рд╣реИ New
ред рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА LanguageRepository
рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ List
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ: public IList<LanguageClass> Languages() { LanguagesRepository rep = new LanguagesRepository(); return rep.List(); }
2) рддрд░реАрдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ New
рд╡рд┐рдзрд┐ New
рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдХреНрд░рд┐рдпрд╛ (рджреГрд╢реНрдп рдХреЛ рдЦреЛрд▓рдирд╛ ) рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдкрд░ рдХреЛрдИ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдореЙрдбрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдХреНрд░рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдлрд╛рд░реНрдо рдбреЗрдЯрд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП: рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдиреНрдпреВ рд╕реНрдЯреЙрдХ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ , рдЪреЗрдХ рдбреЗрдЯрд╛ рд╢реБрджреНрдзрддрд╛ (рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдореЗрдВ рдмрддрд╛рдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд░ ) рднрдВрдбрд╛рд░ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛, рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмреБрд▓рд╛ рд░рд╣рд╛ рд╣реИHtml.ActionLink("New user", "New", "Users")
Index
New
New
UserModel
public ActionResult New(UserModel model)
UserModel
UserClass
LanguageClass
UsersRepository
AddUser(model.User)
ред рдлрд┐рд░ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ (рдЬрд╣рд╛рдВ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ New
) рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред3) Edit
рд╡рд┐рдзрд┐ Edit
рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ UserID
(рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА) рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рдВрдкрд╛рджрд┐рдд рджреГрд╢реНрдп рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреА рд╣реИ: public ActionResult Edit(int UserID)
рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ UsersRepository
рдФрд░ рдЗрд╕реЗ FetchByID(UserID)
рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ UserClass
ред рд╕рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - UserModel
рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБ рдФрд░ рднрд╛рд╖рд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╕реЗ рдПрдХ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдФрд░ Edit
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ редрдкреНрд░рдХрд╛рд░ UserModel
рдФрд░ рдкрдВрдХреНрддрд┐ рдореЙрдбрд▓ рдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ action
:public ActionResult Edit(UserModel model, string action)
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ UserModel
рдФрд░ рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рддрдм рдХрд░рддрд╛ рд╣реИ рдЬрдм рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рджреГрд╢реНрдп рдХреЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдШрдЯрдирд╛рдПрдБ) Edit
ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ action
, рдЬрд┐рд╕реЗ HTML рдкреНрд░рдХрд╛рд░ рдЯреИрдЧ рдХреЗ рдирд╛рдо рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ input
ред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ value
рдЗрди рдмрдЯрди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИ ред рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, Cancel
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрд╛рджрди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ ред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ New
рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рдкрддреЗ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рджреГрд╢реНрдп рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛редEdit
ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдВрддреНрд░рдХ рдиреЗ рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдХрдиреАрдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ ActionFilter
: ReferrerHoldAttribute.csReferrerHoldAttribute
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдЧ ( HtmlAttribute рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ): 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); } }
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ " рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ " рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкрд░ рд▓реМрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ : TempData["referrer"] = ControllerContext.RouteData.Values["referrer"];
рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рд░ рдмрд╛рд░ рд╣рдо рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рди рд▓рд┐рдЦреЗрдВред рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХрдИ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИредрдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ, рдЬреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИ New
рдФрд░ Edit
рд╕рдВрдЧреНрд░рд╣реАрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╕реЗ рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛: if (TempData["referrer"] != null) return Redirect(TempData["referrer"].ToString());
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рддреБрд▓рдирд╛ рд╕реЗрд╡ рдФрд░ рдХреЗ action
рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИрдирд┐рдХрд╛рд▓реЗрдВ, рдХреНрд░рдорд╢рдГ, рдФрд░ UsersRepository
рдлрд╝рдВрдХреНрд╢рди ChangeUser(model.User)
рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдмреБрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ RemoveUser(model.User)
ред рдлрд┐рд░ рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрда (рдЬрд╣рд╛рдВ рд╕реЗ рджреГрд╢реНрдп рдХреЙрд▓ рдЖрдпрд╛ рдерд╛ Edit
) рдкрд░ рд╡рд╛рдкрд╕реА рд╣реЛрддреА рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИредADO.NET рдФрд░ MySQL - рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд╣рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ Users
, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ, рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Languages
редрдорд╛рдирдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ MySQL.Data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ MySqlCommand
: using (MySqlConnection connect = new MySqlConnection( )) { string sql = " "; using (MySqlCommand cmd = new MySqlCommand(sql, connect)) { cmd.Parameters.Add(" ", ).Value = ; connect.Open(); result = cmd.ExecuteNonQuery() >= 0;
рдпрд╛ MySqlDataReader
рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП: using (MySqlConnection connect = new MySqlConnection( )) { string sql = " "; using (MySqlDataReader dr = cmd.ExecuteReader()) { cmd.Parameters.Add(" ", ).Value = ; objConnect.Open(); while (dr.Read()) {
рдореЙрдбрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ UserRepository.cs рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ : 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 > 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() >= 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 > 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() >= 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() >= 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 > 0) language = new LanguageClass(LanguageID: LanguageID, LanguageName: LanguageName); if (UserID > 0 && language != null && language.LanguageID > 0) user = new UserClass(UserID: UserID, Loginname: Loginname, Language: language, Email: Email, LastLoginDate: LastLoginDate, SupporterTier: (Supporter)SupporterTier); } } } return user; }
рдЗрд╕рдореЗрдВ AddUser
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ ( ChangeUser
), рд╣рдЯрд╛рдирд╛ ( RemoveUser
), рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЦреЛрдЬ ( FetchByID
) рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдФрд░ List
рдЫрдБрдЯрд╛рдИ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдкреГрд╖реНрдард╛рдВрдХрд┐рдд рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рд╣реИ ред рдореИрдВ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ List
:- рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ (
DataTable
) рдЗрд╕ рддрд░рд╣ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рджреГрд╢реНрдп рдореЗрдВ рд╡рд░реНрдЧ рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрдВрдЧреЗ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдВрдЧреЗред рдпрд╛рдиреА SQL-. UserClass
. LIMIT
SQL- SELECT
. , MySQL , LIMIT
. , , ORDER BY
. , SQL-, SQL , , . , , : .- SQL
SELECT FOUND_ROWS()
, , SELECT SQL_CALC_FOUND_ROWS
LIMIT
.
рдЕрдиреНрдп рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ, рдКрдкрд░ рдХреЗ рдХреИрдирди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВредрдФрд░ LanguageRepository.cs рдореЙрдбрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ : public class LanguagesRepository { public IList<LanguageClass> List() { List<LanguageClass> languages = new List<LanguageClass>(); 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; } }
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рд╣реИ, рд╡рд░реНрдЧ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛ LanguageClass
редрдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рд╡рд╣ рд╕рдм - рдХрд╛рд░реНрдп рд╣рд▓ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХрдИ рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдВрдЯреЗрдирд░, рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг, рдореЛрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг, рдЖрджрд┐ред рдЖрджрд┐
рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рдпрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреЛ "рдИрдВрдЯ" рдирд┐рдХрд▓рд╛, рд╡рд╣ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдХрд┐ ASP.NET MVC рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ ADO.NET рдФрд░ DBMS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ MS SQL рдирд╣реАрдВ рд╣реИрдВредPS рдФрд░ рдЕрдВрдд рдореЗрдВ: рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕ рдкрддреЗ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдФрд░ рдпрд╣рд╛рдВ рдЖрдк рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рдвреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдбрд╝реА ред