рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд╛рдареНрдпрдХреНрд░рдоред ASP.NET MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рд╕реЙрд░реНрдЯ рдХрд░реЗрдВ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ, рдФрд░ рдкрдЧрд┐рдиреЗрдЯ рдХрд░реЗрдВ

рдпрд╣ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ ASP.NET MVC 3 рд╡рд┐рдХрд╛рд╕ рд▓реЗрдЦ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХреНрд╕ рдкрд░ рдкрд╣рд▓рд╛ рдЕрдзреНрдпрд╛рдп рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ: ASP.NET MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рдФрд░ рдПрдХ ASP рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдореВрд▓ CRUD рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред .NET MVC

рдкрд┐рдЫрд▓реЗ рдкрд╛рда рдореЗрдВ, рд╣рдордиреЗ рдЫрд╛рддреНрд░ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП CRUD рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдареЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЗрд╕ рдкрд╛рда рдореЗрдВ рд╣рдо рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдкреЗрдЬрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рдкреЗрдЬ рднреА рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреНрд░реБрдкрд┐рдВрдЧ рд╣реЛрдЧреАред

рдирд┐рдореНрди рдЫрд╡рд┐ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рджреГрд╢реНрдп рджрд┐рдЦрд╛рддреА рд╣реИред рдХреЙрд▓рдо рд╣реЗрдбрд░ рд▓рд┐рдВрдХ рд╣реИрдВ рдЬреЛ рдЕрд╡рд░реЛрд╣реА рдФрд░ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

image

рдЫрд╛рддреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдкреГрд╖реНрда рдкрд░ рдХреЙрд▓рдо рдореЗрдВ рд╕реЙрд░реНрдЯрд░ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдирд╛


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

рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╡рд┐рдзрд┐ рдореЗрдВ рдЫрдБрдЯрд╛рдИ рдЬреЛрдбрд╝рдирд╛

рдирд┐рдпрдВрддреНрд░рдХреЛрдВ \ StudentController.cs рдореЗрдВ, рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВ:

public ViewResult Index(string sortOrder) { ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date"; var students = from s in db.Students select s; switch (sortOrder) { case "Name desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "Date desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); } 

рдпрд╣ рд╡рд┐рдзрд┐ URL рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ SortOrder рд▓реЗрддрд╛ рд╣реИ рдЬреЛ ASP.NET рд╡рд┐рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдирд╛рдо" рдпрд╛ "рддрд┐рдерд┐" рдХреЗ рд╕рд╛рде (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рдПрдХ рдмрд╛рдж рдХреА рдЬрдЧрд╣ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ "desc" рд╣реИ рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЬрдм рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рдХреНрд╡реЗрд░реА рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдЖрд░реЛрд╣реА рдХреНрд░рдо LastName рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрддрдВрдн рд╢реАрд░реНрд╖рдХ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрдмрдВрдзрд┐рдд рд╕реЙрд░реНрдЯрд░ рдорд╛рди рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреЛ ViewBag рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рджреГрд╢реНрдп рдЙрдкрдпреБрдХреНрдд рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рд╢реАрд░реНрд╖рдХ рд╣рд╛рдЗрдкрд░рд▓рд┐рдВрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХреЗ:

 ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date"; 

рдпрд╣ рдПрдХ рддреАрдЦрд╛ рдмрдпрд╛рди рд╣реИред рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╕реЙрд░реНрдЯрдСрд░реНрдбрд░ рд╢реВрдиреНрдп рдпрд╛ рд░рд┐рдХреНрдд рд╣реИ, рддреЛ ViewBag.NameSortParam рдХрд╛ рдорд╛рди "рдирд╛рдо desc" рдкрд░ рд╕реЗрдЯ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд╕реЗрдЯ рд╣реИред

рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
рд╕реНрддрдВрдн рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ LINQ рд╕реЗ рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕реНрд╡рд┐рдЪ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдореЗрдВ, рдПрдХ рдЪрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реНрд╡рд┐рдЪ рдЪрд░ рдХреА рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдЗрд╕ рдЪрд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рд┐рдЪ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯреЛрд▓рд┐рд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк IQueryable рдЪрд░ рдмрдирд╛рддреЗ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреЛрдИ рдкреВрдЫрддрд╛рдЫ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЬрдм рддрдХ рдЖрдк рдЯреЙрд▓рд┐рд╕реНрдЯ рдЬреИрд╕реА рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ IQueryable рдХреЛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд░рд┐рдЯрд░реНрди рд╡реНрдпреВ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЫрд╛рддреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд▓рд┐рдВрдХ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдирд╛


рджреГрд╢реНрдп \ рдЫрд╛рддреНрд░ \ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ ред cshtml рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдХреЛрдб <tr> рдФрд░ <th> рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 <tr> <th></th> <th> @Html.ActionLink("Last Name", "Index", new { sortOrder=ViewBag.NameSortParm }) </th> <th> First Name </th> <th> @Html.ActionLink("Enrollment Date", "Index", new { sortOrder=ViewBag.DateSortParm }) </th> </tr> 

рдпрд╣ рдХреЛрдб рдЙрдкрдпреБрдХреНрдд рдХреНрд╡реЗрд░реА рдорд╛рди рд╡рд╛рд▓реЗ рд▓рд┐рдВрдХ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ViewBag рдЧреБрдгреЛрдВ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдХрд┐ рдЫрдБрдЯрд╛рдИ рдХреЗ рдХрд╛рдо рдХреНрдпрд╛ рд╣реИрдВред

image

рдПрдХ рдЦреЛрдЬ рдЬреЛрдбрд╝рдирд╛


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

рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдердб рдХреЛрдб рдмрджрд▓рдирд╛

рдирд┐рдпрдВрддреНрд░рдХреЛрдВ \ StudentController.cs рдореЗрдВ, рдЗрдВрдбреЗрдХреНрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ

 public ViewResult Index(string sortOrder, string searchString) { ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date"; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } switch (sortOrder) { case "Name desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "Date desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); } 

рд╣рдордиреЗ рдЦреЛрдЬ рдкрджреНрдзрддрд┐ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рд╛, LINQ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдПрдХ рдирд╛рд░рд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдЙрди рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдЬрд┐рдирдХреЗ рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рдирд╛рдо рдореЗрдВ рдПрдХ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЪреБрдиреЗ рдЧрдП рд╣реИрдВред рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдмрд╛рдж рдореЗрдВ рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╡рд╣ рдХреЛрдб рдЬреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХреНрд▓реЙрдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рддрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:

 if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } 

рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ .NET .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди SQL рд╕рд░реНрд╡рд░ рдХреЙрдореНрдкреИрдХреНрдЯ 4.0 рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд╛рддрд╛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рд╕реЗрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рджреГрд╢реНрдп рдореЗрдВ рдЦреЛрдЬ рдЬреЛрдбрд╝рдирд╛


рджреГрд╢реНрдп \ рдЫрд╛рддреНрд░ \ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ ред cshtml, рдЦреБрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЯреЗрдмрд▓ рдЯреИрдЧ, рдПрдХ рд╢реАрд░реНрд╖рдХ, рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЦреЛрдЬ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ:

 @using (Html.BeginForm()) { <p> Find by name: @Html.TextBox("SearchString")  <input type="submit" value="Search" /></p> } 

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдБ, рдЦреЛрдЬ рдмрд╛рд░ рдореЗрдВ рдХреБрдЫ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

image

рдкрд╛рдЧ рдЬреЛрдбрд╝рдирд╛


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ PagedList NuGet рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЗрдВрдбреЗрдХреНрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ рдФрд░ рджреГрд╢реНрдп рдореЗрдВ рдкреГрд╖реНрда рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред

image

NuGet рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


PagedList NuGet рдкреИрдХреЗрдЬ, PagedList рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдкреГрд╖реНрдард╛рдВрдХрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Visual Studio рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВред рдлрд┐рд░ рдЯреВрд▓реНрд╕ рдореЗрдиреВ рдЖрдЗрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреИрдХреЗрдЬ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ ред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреИрдХреЗрдЬ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВ рдореЗрдВ, рдмрд╛рдИрдВ рдУрд░ рдСрдирд▓рд╛рдЗрди рдЯреИрдм рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЦреЛрдЬ рдмрд╛рд░ рдореЗрдВ "рдкреЗрдЬрд▓рд┐рд╕реНрдЯ" рджрд░реНрдЬ рдХрд░реЗрдВред рдЬреИрд╕реЗ рд╣реА PagedList рдкреИрдХреЗрдЬ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред

image

рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдирд╛


рдХрдВрдЯреНрд░реЛрд▓рд░ \ StudentController.cs рдореЗрдВ PagedList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝реЗрдВ:

PagedList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛;

рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рдзрд┐ рдХреЛрдб рдмрджрд▓реЗрдВ:

  public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) { ViewBag.CurrentSort = sortOrder; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date"; if (Request.HttpMethod == "GET") { searchString = currentFilter; } else { page = 1; } ViewBag.CurrentFilter = searchString; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper()) || s.FirstMidName.ToUpper().Contains(searchString.ToUpper())); } switch (sortOrder) { case "Name desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "Date desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } int pageSize = 3; int pageIndex = (page ?? 1) - 1; return View(students.ToPagedList(pageIndex, pageSize)); } 

рдкреГрд╖реНрда рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЫрдБрдЯрд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рджреГрд╢реНрдп рд╕реВрдЪрдХрд╛рдВрдХ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЙрд░реНрдЯрдСрд░реНрдбрд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░реЗрдВрдЯрдЗрдВрдЯрд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░реНрдЪрд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЗрдВрдЯ? рдкреЗрдЬ)

рдкрд╣рд▓реА рдмрд╛рд░ рдкреГрд╖реНрда рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдкреГрд╖реНрда рдХреЗ рдХрд┐рд╕реА рдПрдХ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ), рддреЛ рдкреГрд╖реНрда рдЪрд░ рд╢реВрдиреНрдп рд╣реИред рдЗрд╕ рдЪрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ рд░рдЦреА рдЬрд╛рддреА рд╣реИред

ViewBag рдЧреБрдг рдЕрдиреНрдп рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдЬрд░рддрд╛ рд╣реИ:

ViewBag.CurrentSort = SortOrder;

рд╡реНрдпреВрдмрд╛рдЧ рдХреА рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ, рддреЛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦреЛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реЗрдЬ рд▓реА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЦреЛрдЬ рдмрд╛рд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдгрд╛рдо рдкреГрд╖реНрда рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ 1 рдкрд░ рдЧрд┐рд░рд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

  if (Request.HttpMethod == "GET") { searchString = currentFilter; } else { page = 1; } ViewBag.CurrentFilter = searchString; 

рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдХреНрд╡реЗрд░реА рдХреЛ рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ PagedList рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдкреГрд╖реНрдард╛рдВрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

 int pageSize = 3; int pageIndex = (page ?? 1) - 1; return View(students.ToPagedList(pageIndex, pageSize)); 

ToPagedList рдкрджреНрдзрддрд┐ рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдкреЗрдЬ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдорд╛рди рдХреЛ рдкрд╛рд░ рдХрд░ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдкреЗрдЬ рдирдВрдмрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд 0 рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреЗрдЬ рдЗрдВрдбреЗрдХреНрд╕ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдЬ рдирдВрдмрд░ рд╕реЗ рдХреЛрдб 1 рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ (рджреЛ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдЕрд╢рдХреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХреНрд╕рдкреНрд░реЗрд╢рди (рдкреЗрдЬ ?? 1) рдкреЗрдЬ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорд╛рди рд╣реИ, рдпрд╛ 1 рдпрджрд┐ рдкреЗрдЬ рд╢реВрдиреНрдп рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреЗрдЬIndex рдХреЛ рдкреЗрдЬ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ - 1 рдпрджрд┐ рдкреЗрдЬ рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЗрд╕реЗ 1 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред -1 рдЕрдЧрд░ рдпрд╣ рд╢реВрдиреНрдп рд╣реИ)

рдХрд┐рд╕реА рджреГрд╢реНрдп рдореЗрдВ рдкреГрд╖реНрда рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛


рджреГрд╢реНрдп \ рдЫрд╛рддреНрд░ \ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ ред cshtml рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:

 @model PagedList.IPagedList<ContosoUniversity.Models.Student> @{ ViewBag.Title = "Students"; } <h2>Students</h2> <p> @Html.ActionLink("Create New", "Create") </p> @using (Html.BeginForm()) { <p> Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)  <input type="submit" value="Search" /></p> } <table> <tr> <th></th> <th> @Html.ActionLink("Last Name", "Index", new { sortOrder=ViewBag.NameSortParm, currentFilter=ViewBag.CurrentFilter }) </th> <th> First Name </th> <th> @Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm, currentFilter = ViewBag.CurrentFilter }) </th> </tr> @foreach (var item in Model) { <tr> <td> @Html.ActionLink("Edit", "Edit", new { id=item.StudentID }) | @Html.ActionLink("Details", "Details", new { id=item.StudentID }) | @Html.ActionLink("Delete", "Delete", new { id=item.StudentID }) </td> <td> @Html.DisplayFor(modelItem => item.LastName) </td> <td> @Html.DisplayFor(modelItem => item.FirstMidName) </td> <td> @Html.DisplayFor(modelItem => item.EnrollmentDate) </td> </tr> } </table> <div> Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount @if (Model.HasPreviousPage) { @Html.ActionLink("<<", "Index", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter }) @Html.Raw(" "); @Html.ActionLink("< Prev", "Index", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter }) } else { @:<< @Html.Raw(" "); @:< Prev } @if (Model.HasNextPage) { @Html.ActionLink("Next >", "Index", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter }) @Html.Raw(" "); @Html.ActionLink(">>", "Index", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter }) } else { @:Next > @Html.Raw(" ") @:>> } </div> 

@Model рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпреВ рдЯрд╛рдЗрдк рд▓рд┐рд╕реНрдЯ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрдЬрд╛рдп PagedList рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдкрд╛рда рд▓рд╛рдЗрди рдХреЛ рд╡рд░реНрддрдорд╛рди рдЦреЛрдЬ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦреЛрдЬ рдкрдВрдХреНрддрд┐ рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рдкреГрд╖реНрда рд╕реЗ рдкреГрд╖реНрда рдкрд░ рдЬрд╛ рд╕рдХреЗ:

рдирд╛рдо рд╕реЗ рдЦреЛрдЬреЗрдВ: Html .TextBox ("SearchString", ViewBag.CurrentFilter рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ) & nbsp;

рдХреЙрд▓рдо рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдВрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХреЗ:

Html .ActionLink ("рдЕрдВрддрд┐рдо рдирд╛рдо", "рд╕реВрдЪрдХрд╛рдВрдХ", рдирдпрд╛ {SortOrder = ViewBag.NameSortParm, currentFilter = ViewBag.CurrentFilter})

рдкреГрд╖реНрда рдХреЗ "рдкрд╛рдж" рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ рдЬреЛ рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд▓рд┐рдВрдХ рджрд┐рдЦрд╛рддреА рд╣реИ:

рдкреГрд╖реНрда [рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛] [рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛] << <рдкрд┐рдЫрд▓рд╛ рдЕрдЧрд▓рд╛> >>

<< - рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХрд╛ рд▓рд┐рдВрдХ, < рдкрд┐рдЫрд▓рд╛ - рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрда рдХрд╛ рд▓рд┐рдВрдХ, рдЗрддреНрдпрд╛рджрд┐ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ 1 рдкрд░ рд╣реИ, рддреЛ рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЕрдВрддрд┐рдо рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рднреАред рдкреГрд╖реНрда рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкрд░ рдЪрдпрдирд┐рдд рдкреГрд╖реНрда рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдк рдкреЗрдЬреЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИрдВ, рддреЛ "рдкреГрд╖реНрда 0 рдХрд╛ 0" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдВред

image

рд╡рд┐рднрд┐рдиреНрди рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВ рдХрд┐ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкреГрд╖реНрда рдмрдирд╛рдирд╛


рдЕрдмрд╛рдЙрдЯ рдкреЗрдЬ рдкрд░, рд╣рдо рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рддрд┐рдерд┐ рдореЗрдВ рдХрд┐рддрдиреЗ рдЫрд╛рддреНрд░реЛрдВ рдиреЗ рджрд╛рдЦрд┐рд▓рд╛ рд▓рд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣реАрдХрд░рдг рдФрд░ рдЫреЛрдЯреА рдЧрдгрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП:

рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓ рдмрдирд╛рдирд╛


рдПрдХ ViewModels рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ EnrolmentDateGroup рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕реАрдПрд╕ :

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace ContosoUniversity.ViewModels { public class EnrollmentDateGroup { [DisplayFormat(DataFormatString = "{0:d}")] public DateTime? EnrollmentDate { get; set; } public int StudentCount { get; set; } } } 

рдЧреГрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛


рд╣реЛрдордХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ ред рд╕реАрдПрд╕ рдЖрд╡рд╢реНрдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЬреЛрдбрд╝реЗрдВ:

 using ContosoUniversity.DAL; using ContosoUniversity.Models; using ContosoUniversity.ViewModels; 

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

рдирд┐рдЬреА рд╕реНрдХреВрд▓рдХреЛрдЯреЗрдХреНрд╕реНрдЯ db = new SchoolContext ();

рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:

 public ActionResult About() { var data = from student in db.Students group student by student.EnrollmentDate into dateGroup select new EnrollmentDateGroup() { EnrollmentDate = dateGroup.Key, StudentCount = dateGroup.Count() }; return View(data); } 

LINQ рд╕реНрдЯреЗрдЯреНрд╕ рд╕реНрдЯреВрдбреЗрдВрдЯ рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреЛ рдбреЗрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдХреЗ, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░реБрдк рдореЗрдВ рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ EnrolmentDateGroup рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред

рд╡реНрдпреВ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрджрд▓рдирд╛


рдХреЛрдб рдХреЛ рджреГрд╢реНрдп \ Home \ About.cshtml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓реЗрдВ:

 @model IEnumerable<ContosoUniversity.ViewModels.EnrollmentDateGroup> @{ ViewBag.Title = "Student Body Statistics"; } <h2>Student Body Statistics</h2> <table> <tr> <th> Enrollment Date </th> <th> Students </th> </tr> @foreach (var item in Model) { <tr> <td> @String.Format("{0:d}", item.EnrollmentDate) </td> <td> @item.StudentCount </td> </tr> } </table> 

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдВред

image

рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдмреЗрд▓реЛрдЯреЗрд░реНрд╕рдХреЛрд╡рд╕реНрдХреА ( рдПрд╣рд░рд┐рдорди ) рдХреЗ рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In133845/


All Articles