рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдмрдврд╝рддреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдРрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕реАрдзреЗ рдХрд╛рдо рдХрд░реЗрдВред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрдВрдб, рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрд╛рдлреА рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ
рдореИрдВ рдЖрд╕рд╛рди рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рдЙрди рд╕рднреА рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд╛рдареА рдмрдирд╛рдиреЗ рдФрд░ рдЖрд╕рд╛рди рдЧреБрдгреЛрдВ рдХреЗ рджреЗрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдпрд╣ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкреЛрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рддреЛ рд▓реЛрдЧ рд╣рдмрд░ рдкрд░ рджрдВрдбрд┐рдд рдФрд░ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИрдВ)ред
рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░реЗрдЬрд░ рдкрд░ рдПрдХ рдЬреЛрд░рджрд╛рд░ рдЯрд╛рдЗрдкреНрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЙрд╕реНрддрд░рд╛
рдЬреЛ рд▓реЛрдЧ рдЪреВрдХ рдЧрдП, рдЙрдирдХреЗ рд▓рд┐рдП рд░реЗрдЬрд░ рдПрдХ рдРрд╕реА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ C # рдпрд╛ VB рдХреЛ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ ASP.NET MVC рдФрд░ WebMatrix рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕рдХреЗ рд╕рднреА рдЕрджреНрднреБрдд рдЧреБрдгреЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреЙрдЯ рдЧреБрдерд░реА
рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ рд▓рд┐рдП
рдХрд┐рдпрд╛ рдерд╛ , рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ
рдЗрд╕реЗ рд╣реЗрдмреЗрд░рд╛ рдореЗрдВ
рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рднреА
рдХрд░ рджрд┐рдпрд╛ рдерд╛ред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣
рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ
IntelliSense рд╕рд╣рд┐рдд рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд░реНрдерди рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдВ ASP.NET MVC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ .Net рдкрд░ рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд░реЗрдЬрд░ рдкрд░ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдЪрд┐рдд рдкрд░рд┐рд╢реНрд░рдо рдХреЗ рд╕рд╛рде, рдЖрдк рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╕рд░реНрд╡рд░ рдкрд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рдорд╛рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
MVC рдХреЗ рдмрд╛рд╣рд░ рд░реЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдЬреЛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ C # рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдореЗрд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ ...
SharpKit
рдпрд╣ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ,
рд╣реИрдмрд░ рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдЖрдкрдХреЛ C # рдХреЛрдб рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗ
using SharpKit.JavaScript; using SharpKit.jQuery; namespace Namespace { [JsType(JsMode.Global)] public class MyPageClient : jQueryContext { public static void Hello(string name) { J(document.body).append(J("<h1/>").text("Hello, " + name.ToUpper())); } } }
рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛
function Hello(name) { $(document.body).append($("<h1/>").text("Hello, " + name.toUpperCase())); };
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕рд╣рдиреАрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИред рдЖрдк
рдСрдирд▓рд╛рдЗрди рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рднреА рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╢рд╛рд░реНрдкрд┐рдЯ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреИрд╕реЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреА 2500 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрднреА-рдХрднреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд╛рдХрд┐рдл рд╣реВрдВ, рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ SharpKit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╕рднреА рд╕рдорд╛рди, рдпрд╣ рд╕рдВрдХрд▓рди рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯреИрд▓рд┐рдЬреЗрдВрд╕, рдФрд░ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдХреБрдЫ рдореИрдВ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдпрд╣ SharpKit рдХреА рдорджрдж рд╕реЗ рдерд╛ рдХрд┐ рд░реЗрдЬрд╝рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ C # рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
MSBuild
рдЦреИрд░, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ MSBuild рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реА рдмрд╛рдд рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ред
рдФрд░ рдЕрдм, рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ
рд╢рд╛рд░реНрдкрд┐рдЯ рд░реЗрдЬрд░
рд╣рд╛рдВ, рдореИрдВ рдХрд┐рд╕реА рдореВрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ред
CodePlex рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯрдПрд╣, рдХрдард┐рдирд╛рдИ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди
Google рдЕрднреА рднреА рдореБрдЭреЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ ред
рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рдХреЛрдб, рдбреЗрдореЛ рд╣реИрдВред
рдФрд░ рдЕрдм рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ - рдХреЛрдб рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ
рдареАрдХ рд╣реИ, рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдХреЗрдВрджреНрд░ рд╣реИ, рдЖрдкрдХреЛ рд╕рднреА рд╣рд┐рдореНрдордд рдЬреБрдЯрд╛рдиреА рд╣реЛрдЧреАред рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрдврд╝реЗрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░реЗрдЬрд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╕
рдЬрдм рд░реЗрдЬрд░ рдЗрдВрдЬрди рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ
@inherit MyBase<string[]> <ul> @foreach (var item in Model) { <li>@item</li> } </ul>
рдЖрдЙрдЯрдкреБрдЯ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
namespace MyNamespace { public class MyView: MyBase<string[]> { public override void Execute() { WriteLiteral("<ul>\r\n"); foreach (var item in Model) { WriteLiteral("\t<li>"); Write(item); WriteLiteral("</li>\r\n"); } WriteLiteral("</ul>"); } } }
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдРрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐), рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо (рд▓рд┐рдЦреА рдЧрдИ рд╡рд┐рдзрд┐ - рд▓рд┐рдЦреА рдЧрдИ рд╡рд┐рдзрд┐, рдмрд┐рдирд╛ рд▓рд┐рдЦреА - рд▓рд┐рдЦреА рд╡рд┐рдзрд┐) рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдЦреЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо IRenderingArea рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рднреА рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рддреЗ рд╣реИрдВред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ:
public interface IRenderingArea { [JsProperty(NativeField = false)] object Model { get; set; } [JsProperty(NativeField = false)] string Result { get; } void Execute(); } public interface IRenderingArea<T>: IRenderingArea { [JsProperty(NativeField = false)] new T Model { get; set; } }
рдпрд╣рд╛рдВ рдЗрдВрдЯрд░рдлреЗрд╕ рддреБрд░рдВрдд рдПрдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдФрд░ рдЕрдирдЫреБрдП рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╣реИрдВред JsProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдпрд╣ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ рдХрд┐ SharpKit рдкрд░рд┐рдгрд╛рдо рдлрд╝реАрд▓реНрдб рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ get_Result () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдореБрд╢реНрдХрд┐рд▓ рдпреБрджреНрдзрд╛рднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд╣реЛрдЧрд╛ред
рдЦреИрд░, рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╣реА рдРрд╕рд╛ рд╣реЛрдЧрд╛:
[JsType(JsMode.Prototype)] public abstract class HtmlArea<T>: JsContext, IRenderingArea<T> { private string _result = ""; public string Result { get { return _result; } } [JsField(Export = false)] private T _model; public T Model { get { return _model; } set { _model = value; } } [JsProperty(Export = false)] object IRenderingArea.Model { get { return Model; } set { Model = value.As<T>(); } } protected virtual void Write(object value) { if (value != null) _result += EscapeValue(value.As<JsObject>().toString()); } protected virtual string EscapeValue(JsString value) { return value .replace("&", "&") .replace("<", "<") .replace(">", ">") .replace("\"", """) .replace("'", "'"); } protected virtual void WriteLiteral(string value) { _result += value; } public abstract void Execute(); }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рд╡рд░реНрдЧ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХрдИ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреА рдЬрдЧрд╣ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрджрд▓рдХрд░ рдкрд░рд┐рд░рдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ, рдореИрдВ рдкрд░рд┐рдгрд╛рдореА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ:
if(typeof(XWeb) == "undefined") XWeb = {}; if(typeof(XWeb.SharpKit) == "undefined") XWeb.SharpKit = {}; if(typeof(XWeb.SharpKit.Razor) == "undefined") XWeb.SharpKit.Razor = {}; XWeb.SharpKit.Razor.AreaExtensions = function() { }; XWeb.SharpKit.Razor.AreaExtensions.Execute = function(view,model) { var area=view(); if(typeof(model) != "undefined") area.set_Model(model); area.Execute(); return area.get_Result(); }; XWeb.SharpKit.Razor.HtmlArea = function() { this._result = ""; }; XWeb.SharpKit.Razor.HtmlArea.prototype.get_Result = function() { return this._result; }; XWeb.SharpKit.Razor.HtmlArea.prototype.get_Model = function() { return this._model; }; XWeb.SharpKit.Razor.HtmlArea.prototype.set_Model = function(value) { this._model = value; }; XWeb.SharpKit.Razor.HtmlArea.prototype.Write = function(value) { if(value != null) this._result += this.EscapeValue(value.toString()); }; XWeb.SharpKit.Razor.HtmlArea.prototype.EscapeValue = function(value) { return value.replace("&","&").replace("<","<").replace(">",">").replace("\"",""").replace("'","'"); }; XWeb.SharpKit.Razor.HtmlArea.prototype.WriteLiteral = function(value) { this._result += value; };
рдЕрдм, рддрд╛рдХрд┐ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧ рдЪрд▓рд╛рдП рдЬрд╛ рд╕рдХреЗрдВ, рдФрд░ рдЙрдирд╕реЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ, рдХреБрдЫ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреМрди рд╕реА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирд╛рдо рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рд╣рдорд╛рд░реЗ рдЬреЛрд░рджрд╛рд░ рдЯрд╛рдЗрдк рд╕реА # рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреЛрд╖реЗрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛рдиреА рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреАред рдФрд░ рдлрд┐рд░, рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
[JsType(JsMode.Prototype)] public static class AreaExtensions { [JsMethod(OmitOptionalParameters = true)] public static string Execute<T>(this Func<IRenderingArea<T>> view, T model = default(T)) { var area = view(); if (JsContext.JsTypeOf(model) != JsTypes.undefined) area.Model = model; area.Execute(); return area.Result; } }
рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдореЙрдбрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдХрдХреНрд╖рд╛ рд╕реГрдЬрди
рдЕрдЧрд▓рд╛, рд░реЗрдЬрд░ рдЗрдВрдЬрди рдЦреЗрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
рдУрд╣-рд╡рд╣! рд╣реЗрдмрд░ рдЕрдм рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдЬрд╛рд░реА рд░рдЦреЗрдВред