рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ
DropDownList рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
, MVC 4 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП "рдорд╛рди" рд╕реЗрдЯ рдХрд░реЗрдВ , рдЖрдЬ рдореИрдВ рдЕрдирдВрдд рдПрдирд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдмрд╣реБ-рд╕реНрддрд░реАрдп рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕реЗ MsSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рд╕рдордп рдкреАрд╕реАрдкреА рдкрд░ рдпрд╣ рдПрдХ-рджреЛ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рднреА рдерд╛ред рд▓реЗрдХрд┐рди RAZOR рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде MVC 4 рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдпрд╛ рдЕрд▓реМрдХрд┐рдХ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреИрд╕реЗред рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ - рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдореИрдиреБрдЕрд▓ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрди рд▓реЗрдЦреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
рдПрдХ ASP.NET MVC рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ ред рдпрд╛ рдпреЗ:
ASP.NET MVC 4 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓1) рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдореБрдЦреНрдп рдмрд╛рдд рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд
рдЖрд▓реЗрдЦреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ "рдкреВрд░реНрд╡рдЬ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрд░рдЪрдирд╛" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
SQL рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
CREATE TABLE "CATALOG" ( "ID" INTEGER NOT NULL PRIMARY KEY, "NAME" VARCHAR(200) CHARACTER SET WIN1251 NOT NULL, "PARENT_ID" INTEGER );
2012 рдореЗрдВ VS рдореЙрдбрд▓ рдмрдирд╛рдПрдВ:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace zf2.Models { public class NewsM { public int NewsMID { get; set; } public int ParentID { get; set; } public string Title { get; set; } public string AddTitle { get; set; } public string Description { get; set; } public string Content { get; set; } public DateTime ModDate { get; set; } } }
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рддреАрди рдХреНрд╖реЗрддреНрд░ рдмреБрдирд┐рдпрд╛рджреА рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдпрд╛ред
2) рдирд┐рдпрдВрддреНрд░рдХред
public ActionResult NewsA(int id = 1) //id { ViewBag.Menu = db.NewsMs.ToList(); // , . ViewBag.Id = id; return View(); }
3) рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп
рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдЙрдирдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдпрд╣ рдареАрдХ рд╣реИред рд╡реЗ рд╕рд╛рдзрд╛рд░рдг рд▓рд┐рдкрд┐рдпреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рд╣реИред
рдлрд╝реЛрд▓реНрдбрд░ рджреГрд╢реНрдп-рд╕рд╛рдЭрд╛-рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ-рдРрдб-рд╡реНрдпреВ рдкрд░ рдЬрд╛рдПрдВ: рдмреЙрдХреНрд╕ "рдПрдХ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдПрдВ" рджреЗрдЦреЗрдВред "_Menu" рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВред рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╣рд╛рдВ, рд╕рд┐рд░реНрдл рдирд╛рдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЪреВрдБрдХрд┐ рдЖрдВрд╢рд┐рдХ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЧрд▓рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ:
"_gMenu" . : ~/Views/Home/_gMenu.aspx ~/Views/Home/_gMenu.ascx ~/Views/Shared/_gMenu.aspx ~/Views/Shared/_gMenu.ascx ~/Views/Home/_gMenu.cshtml ~/Views/Home/_gMenu.vbhtml ~/Views/Shared/_gMenu.cshtml ~/Views/Shared/_gMenu.vbhtml
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЖрдЧреЗ рдмрдврд╝реЛред
"_Menu.cshtml" рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:
@{ List<zf2.Models.NewsM> menuList = ViewBag.Menu; } <ul class="menu"> @foreach (var mp in menuList.Where(p => p.ParentID == 0)){ <li> @Html.ActionLink(mp.Title, ViewContext.RouteData.GetRequiredString("action"), new { id=mp.NewsMID }) @if( menuList.Count(p=>p.ParentID == mp.NewsMID ) > 0){ @:<ul> } @RenderMenuItem(menuList,mp) @if( menuList.Count(p=>p.ParentID == mp.NewsMID ) > 0){ @:</ul> } </li> } </ul> @helper RenderMenuItem(List<zf2.Models.NewsM> menuList, zf2.Models.NewsM mi) { foreach (var cp in menuList.Where(p => p.ParentID == mi.NewsMID)) { @:<li> @Html.ActionLink(cp.Title, ViewContext.RouteData.GetRequiredString("action"), new { id=cp.NewsMID }) if(menuList.Count(p=>p.ParentID == cp.NewsMID) > 0) { @:<ul> } @RenderMenuItem(menuList,cp) if(menuList.Count(p=>p.ParentID == cp.NewsMID) > 0) { @:</ul> } else { @:</li> } } }
рдпрд╣рд╛рдБ рд╕рдм рдЬрд╛рджреВ рд╣реИред
@foreach (var mp in menuList.Where(p => p.ParentID == 0))
- parses рдФрд░ ParentID = 0 рдХреЗ рд╕рд╛рде рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
@RenderMenuItem(menuList,mp)
- рд╡реНрдпреВ рд╣реЗрд▓реНрдкрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддреНрдпреЗрдХ "рд░реВрдЯ" рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рднреА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
@helper RenderMenuItem(List<zf2.Models.NewsM> menuList, zf2.Models.NewsM mi)
- рдпрд╣ рд╕реНрд╡рдпрдВ рд╕рд╣рд╛рдпрдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
@Html.ActionLink(mp.Title, ViewContext.RouteData.GetRequiredString("action"), new { id=mp.NewsMID })
- рд▓рд┐рдВрдХ рдмрдирд╛рдПрдВред рдореИрдВ рдорд╛рдирдХ рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдирд┐рдпрдВрддреНрд░рдХ рдирд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдирд╛рдо рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдИрдбреА - "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
ViewContext.RouteData.GetRequiredString("action")
- рд╣рдореЗрдВ рдПрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЖрдк рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
new { id=mp.NewsMID }
- рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
mp.Title
- рд▓рд┐рдВрдХ рдирд╛рдо
рдЕрдЧрд▓рд╛, "_Content" рдирд╛рдордХ рдПрдХ рдФрд░ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВред
рд╣рдо рдкреНрд░реЗрд╖рд┐рдд рдЖрдИрдбреА рдкрд░ рдЪрдпрдирд┐рдд рд▓реЗрдЦ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдХреЛрдб рд╣реИ:
@{ List<zf2.Models.NewsM> menuList = ViewBag.Menu; } @ViewBag.Id @foreach (var mp in menuList.Where(p => p.NewsMID == ViewBag.Id)) { @mp.Content @mp.AddTitle @mp.Description }
4) рдореБрдЦреНрдп рджреГрд╢реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдПрдХреНрд╢рди рдирд╛рдо рдХреА рддрд░рд╣ рдмреБрд▓рд╛рдпрд╛ рд╣реИ - NewsA.cshtml
рдЗрд╕рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЕрдкрдиреА рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣реЗрдбрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
@{ ViewBag.Title = "NewsA"; } @{ List<zf2.Models.NewsM> menuList = ViewBag.Menu; } <div class="row"> <div class="span3"style="background-color: #e6e6e6;"> @Html.Partial("_Menu") </div> <div class="span6" style="background-color: #e6e6e6;"> @Html.Partial("_Content") </div> </div>
, - Bootstrap - CSS . :
. . :

:
.
Entity Framework
.
, .
:
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using zf2.Models; namespace zf2.DAL { public class ZfInitializer : DropCreateDatabaseIfModelChanges<ZfContext> { protected override void Seed(ZfContext context) { var newsMs = new List<NewsM> { new NewsM { NewsMID = 1, ParentID = 0, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 2, ParentID = 0, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 3, ParentID = 1, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 4, ParentID = 1, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 5, ParentID = 2, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 6, ParentID = 3, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 7, ParentID = 2, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, }; newsMs.ForEach(s => context.NewsMs.Add(s)); context.SaveChanges(); } } }
...
, - Bootstrap - CSS . :
. . :
:
.
Entity Framework
.
, .
:
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using zf2.Models; namespace zf2.DAL { public class ZfInitializer : DropCreateDatabaseIfModelChanges<ZfContext> { protected override void Seed(ZfContext context) { var newsMs = new List<NewsM> { new NewsM { NewsMID = 1, ParentID = 0, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 2, ParentID = 0, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 3, ParentID = 1, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 4, ParentID = 1, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 5, ParentID = 2, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 6, ParentID = 3, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 7, ParentID = 2, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, }; newsMs.ForEach(s => context.NewsMs.Add(s)); context.SaveChanges(); } } }
...
, - Bootstrap - CSS . :
. . :

:
.
Entity Framework
.
, .
:
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using zf2.Models; namespace zf2.DAL { public class ZfInitializer : DropCreateDatabaseIfModelChanges<ZfContext> { protected override void Seed(ZfContext context) { var newsMs = new List<NewsM> { new NewsM { NewsMID = 1, ParentID = 0, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 2, ParentID = 0, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 3, ParentID = 1, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 4, ParentID = 1, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 5, ParentID = 2, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 6, ParentID = 3, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, new NewsM { NewsMID = 7, ParentID = 2, Title = "Carson", AddTitle = "Carson", Description = "Carson", Content = "Carson" , ModDate = DateTime.Parse("2005-09-01") }, }; newsMs.ForEach(s => context.NewsMs.Add(s)); context.SaveChanges(); } } }
...