рдЙрд╕реНрддрд░рд╛: рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬреЛрдВ рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛

рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рдиред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ ASP.NET MVC 3 рдФрд░ рд░реЗрдЬрд░ рдкрд░ рдПрдХ "рдореБрд╢реНрдХрд┐рд▓" рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЖрдЬ рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрдИ рд╣реИ рдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢реЛрдз рдХрд┐рдпрд╛ рдФрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ, рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдЙрдкрдпреЛрдЧреАред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреБрдЫ рджреГрд╢реНрдп рджреЗрдЦреЗрдВ: View.cshtml рдФрд░ ViewWithSide.cshtml, рдФрд░ рджреЛ рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ рднреА рд╣реИрдВ: Layout.cshtml рдФрд░ LayoutWithSide.cshtml, рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, XxxWithSide.cshtml рдкреЗрдЬ рдкрд░ рдПрдХ рд╕рд╛рдЗрдбрдмрд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдХреЛ рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрда рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреГрд╢реНрдп рдореЗрдВ рдЗрдирд╕рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рд▓реЗрдЖрдЙрдЯ рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрда рдореЗрдВ, рдореБрдЦреНрдп рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдиреЗрд╡рд┐рдЧреЗрд╢рди" рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗрдЯ рд╣реИред

рдФрд░ рдЕрдм, рдЬрдм "рдиреЗрд╡рд┐рдЧреЗрд╢рди" рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╡реНрдпреВрд╡рд┐рдерд╕рд╛рдЗрдб рдХреЛрдб рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЖрдЙрдЯрд╡рд┐рдерд╕рд╛рдЗрдб рдореЗрдВ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ "рдЕрдЧрд▓реЗ" рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрда (рд▓реЗрдЖрдЙрдЯ) рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╡реНрдпреВрд╡рд┐рдерд╕рд╛рдЗрдб рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреА: рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЗрдЖрдЙрдЯ рдкреГрд╖реНрда "~ / рджреГрд╢реНрдп / рд╕рд╛рдЭрд╛ / LayoutWithSide.cshtml" рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: "рдиреЗрд╡рд┐рдЧреЗрд╢рди" (" рдиреЗрд╡рд┐рдЧреЗрд╢рди" рдЕрдиреБрднрд╛рдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрда рдкрд░ рдХрд╣реАрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реИ) ред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ "рдЕрдЧрд▓реЗ" рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрда рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрдиреЗ рджреЗрдВред

рдХреБрдЫ рдХреЛрдб


Layout.cshtml
<!DOCTYPE html> <html> <head> <title>@ViewBag.Title</title> </head> <body> <div> @if (IsSectionDefined("navigation")) { <div class="navigation">@RenderSection("navigation")</div> } @RenderBody() </div> </body> </html> 

LayoutWithSide.cshtml
 @{ Layout = "~/Views/Shared/Layout.cshtml"; } <div class="side">@RenderSection("side", required:false)</div> <div class="main">@RenderBody()</div> 

View.cshtml
 @{ ViewBag.Title = "view"; Layout = "~/Views/Shared/Layout.cshtml"; } @section navigation { <a href="@Url.Action("Page1")">page1</a> | <a href="@Url.Action("Page2")">page2</a> } <h2>viewWithoutSide</h2> <div>Main content</div> 

ViewWithSide.cshtml
 @{ ViewBag.Title = "viewWithSide"; Layout = "~/Views/Shared/LayoutWithSide.cshtml"; } @section navigation { <a href="@Url.Action("Page1")">page1</a> | <a href="@Url.Action("Page2")">page2</a> } @section side { <strong>side content</strong> } <h2>viewWithSide</h2> <div>Main content</div> 

рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рд░реЗрдЬрд╝рд░ рдФрд░ ASP.NET MVC рдЗрд╕реЗ рд╕рдордЭреЗрдВрдЧреЗ рдФрд░ рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕ рдФрд░ рдЖрд╣ ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП - рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ


рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдиреЗрд╡рд┐рдЧреЗрд╢рди" рдЕрдиреБрднрд╛рдЧ рд╕рд┐рд░реНрдл рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдХреБрдЫ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдХреЗрд╡рд▓ LayoutWithSide рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рджреГрд╢реНрдп рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ред

рдореИрдВрдиреЗ if (IsSectionDefined("navigation")) рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдШреЛрд╖рдгрд╛ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ... рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ (рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ "рдкрд╛рд░реНрд╕рд░ рддреНрд░реБрдЯрд┐" рдХреА рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ)ред

MSDN рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рд╕рддрд╣реА рдЦреЛрдЬ рдЙрдкрдпреЛрдЧреА рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рджреГрд╢реНрдп рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рдореЗрдВ, DefineSection рд╡рд┐рдзрд┐ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо, рд╕реЗрдХреНрд╢рдирд░реАрдЯрд░ рдПрдХреНрд╢рди) рдХреЛ рддреБрд░рдВрдд рджреЗрдЦрд╛ рдЧрдпрд╛

рдЪреВрдВрдХрд┐ рд░реЗрдЬрд░ рд╢реИрд▓реА рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдШреЛрд╖рдгрд╛ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рдпрджрд┐ рдЖрдк рдШреЛрд╖рдгрд╛ рдореЗрдВ рд╕реА # рдХреЛрдб рд╕реЗ рдЕрдиреБрднрд╛рдЧ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
 if (IsSectionDefined("navigation")) { DefineSection("navigation", delegate() { Write(RenderSection("navigation")); }); } 

рдФрд░ рдЗрд╕ рдХреЛрдб рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛ред

рдирд┐рд░реНрдгрдп


рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХрд╛, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдХреЛрдб рдХреЗ рдЗрддрдиреЗ рдкрддреНрд░ рдирд╣реАрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдлреИрд╢рдиреЗрдмрд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдВ C # рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВрдиреЗ рдирд┐рдореНрди рд╡рд░реНрдЧ рд▓рд┐рдЦрд╛:
 public static class WebPageHelpers { public static void PropagateSection(this WebPageBase page, string sectionName) { if (page.IsSectionDefined(sectionName)) { page.DefineSection(sectionName, delegate() { page.Write(page.RenderSection(sectionName)); }); } } public static void PropagateSections(this WebPageBase page, params string[] sections) { foreach (var s in sections) PropagateSection(page, s); } } 

рдФрд░ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд╛рдо рд╕реЗ рдЧреБрдЬрд╛рд░реЗрдВред рддрдм LayoutWithSide.cshtml рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 @{ Layout = "~/Views/Shared/Layout.cshtml"; this.PropagateSection("navigation"); } <div class="side">@RenderSection("side", required:false)</div> <div class="main">@RenderBody()</div> 

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрдИ рдЦрдВрдбреЛрдВ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдкреГрд╖реНрда рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕. this.PropagateSections("section1", "section2", "section3") рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ ...

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


All Articles