рдиреЙрдХрдЖрдЙрдЯ MVC - ASP.NET MVC рдХреЗ рд▓рд┐рдП рдиреЙрдХрдЖрдЙрдЯ рдХреА рдмрд┐рдЬрд▓реА

knockoutmvc рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП Knockout.js рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдореЙрдбрд▓-рд╡реНрдпреВ-рд╡реНрдпреВ рдореЙрдбрд▓ (MVVM) рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣реЛрдмреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ ( рдПрдХ , рджреЛ , рддреАрди , рдЪрд╛рд░ , рдкрд╛рдВрдЪ , рд╡реАрдбрд┐рдпреЛ )ред рдЖрдк Knockout.js рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ , рд▓рд╛рдЗрд╡ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ (рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкреЛрдХ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рд▓реЗрдЦрди ред

рдмрд╣реБрдд рдмрд╛рд░, Knockout.js ASP.NET MVC рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЙрдЬрд┐рдХ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ: рдЗрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддрд░реНрдХ рдХрд╛ рдореБрдЦреНрдп рдореЙрдбрд▓ рдФрд░ рд╣рд┐рд╕реНрд╕рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдФрд░ рд╕рд░реНрд╡рд░ (рд╕реА # / рд╡реАрдмреА) рджреЛрдиреЛрдВ рдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЕрдкреАрд▓ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдирд┐рдпрдорд┐рдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреБрдЦреА рдордд рд╣реЛ! рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЙрдХрдЖрдЙрдЯ рдПрдорд╡реАрд╕реА рд╣реИ - рдпрд╣ рдиреЙрдХрдЖрдЙрдЯ.рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП .NET рд╢реЗрд▓ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ C # рдореЗрдВ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ MVVM рд╢реИрд▓реА рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ HTML рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рдореЙрдбрд▓ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдФрд░ рдЖрдк рдкреВрд░реЗ рднрд╛рд╡ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╡реЗ js рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реЛрдВрдЧреЗ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рднреА рд▓рд╛рдЗрди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреВрд░реНрдг рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдФрд░ рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░


рдЖрджрд░реНрд╢


рдореЙрдбрд▓ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрд╣рддреЗ рд╣реИрдВ, C # рдореЗрдВ)ред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░, рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рди рдХреЗрд╡рд▓ рд╕рд╛рдзрд╛рд░рдг рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рднреА рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реЛрдВрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдм рди рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рд╕рдмрдореЙрдбрд▓реНрд╕ (рд╢реБрджреНрдз рдиреЙрдХрдЖрдЙрдЯ рдкрд░ рднреА рд╣реЛрддрд╛ рд╣реИред рдЬреЗрдПрд╕ рдРрд╕рд╛ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
public class Item { public string FirstName { get; set; } public string LastName { get; set; } public Expression<Func<string>> FullName() { return () => FirstName + " " + LastName; } } public class Model { public List<Items> Items { get; set; } } // ... var model = new Model { Items = new List<Item> { new Item {FirstName = "Annabelle", LastName = "Arnie"}, new Item {FirstName = "Bertie", LastName = "Brianna"}, new Item {FirstName = "Charles", LastName = "Cayenne"}, } }; 

рдФрд░ рдирд┐рдореНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ:
 var viewModelJs = {"Items":[{"FirstName":"Annabelle","LastName":"Arnie"},{"FirstName":"Bertie","LastName":"Brianna"},{"FirstName":"Charles","LastName":"Cayenne"}]}; var viewModelMappingData = { 'Items': { create: function(options) { var data = ko.mapping.fromJS(options.data); data.FullName = ko.computed(function() { try { return this.FirstName()+' '+this.LastName()} catch(e) { return null; } ;}, data); return data; }}}; var viewModel = ko.mapping.fromJS(viewModelJs, viewModelMappingData); ko.applyBindings(viewModel); 

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

рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ


рдпрджрд┐ рдЖрдк ASP.NET MVC рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЬрд░ рд╡реНрдпреВ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдЗрдВрдЬрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЙрдЪрд┐рдд рд╣реИ - рдпрд╣ рд╕рд╛рдЗрдЯ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдПрдХ рдирдП рд╕реНрддрд░ рдкрд░ рдЙрдард╛рддрд╛ рд╣реИред рд░реЗрдЬрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВред
рдЦреИрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреА рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдП рдХрд╛ рдореВрд▓реНрдп рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
 @ko.Html.TextBox(m => mA) 

рдХреЛрд╖реНрдардХ рдореЗрдВ рдПрдХ рд▓рдВрдмреЛрджрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдВрдзрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо C # рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ IntelliSense рд╣рдорд╛рд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИ:
рд╕реНрдХреНрд░реАрди IntelliSense
рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рддреА рд╕реЗ рдирд╛рдо рдЧрд▓рдд рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рднреА рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ - рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХ рд▓рд╛рд▓ рдкрдЯреНрдЯреА рд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХрд╣реАрдВ рдореИрдВ рдЧрд▓рдд рдерд╛ред
рдЦреИрд░, рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджреЗрдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдореЗрд░реЗ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╕рд╛рде рджреЛ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдХреЗрд╡рд▓ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдкреГрд╖реНрда рдХрд╛ рдПрдХ рднрд╛рдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд▓рд┐рдЦрдирд╛ рд╣реИ:
 @using (ko.If(model => model.Condition1 && model.Condition2)) 

рдЕрдЧрд▓рд╛, рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ, рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рд╕рдВрдЧрдд рд╣рд┐рд╕реНрд╕рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░рд▓, рд╕рд╣реА? рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рддреБрд░рдВрдд рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рдХрдВрдбреАрд╢рди 1 рдФрд░ рдХрдВрдбреАрд╢рди 2 рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЗрдПрд╕-рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЖрджрд┐ред рдФрд░ рдЕрдЧрд░ рд╣рдо рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдпрд╛ рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рдЬрд╛рджреВ рд╣рдорд╛рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рд╣реА рдХрд░реЗрдЧрд╛ (рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЙрддреНрдкрдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣реА рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред
рдиреЙрдХрдЖрдЙрдЯ MVC рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрдорд╛рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:
 @using (var items = ko.Forearch(m => m.Items)) 

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ


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

рдЗрд╕реЗ рд░реЛрдХреЛ! рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ! рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 @ko.Html.Button("Some text", "FooAction", "Foo") 

рдПрдХ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рдкрд╛рдардХ рдкреВрдЫреЗрдЧрд╛: "рдФрд░ рдЕрдЧрд░ рдореИрдВ рд╕рд░реНрд╡рд░ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ?" рдХреБрдЫ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ:
 @ko.Html.Button("Some text", "FooAction", "Foo", new { index = 0, caption = "Knockout MVC"}) 

рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:
 public class FooController : KnockoutController { public ActionResult FooAction(FooModel model, int index, string caption) { model.FooAction(index, caption); //     return Json(model); } } 

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

рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


рд╕реАрдзреЗ Knockout.js рдореЗрдВ рдЬреЛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ред рдЬрдм рдЖрдк рдиреЗрд╕реНрдЯреЗрдб foreach рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЗ with рдиреЗрд╕реНрдЯреЗрдб foreach рдкреИрджрд╛ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрддрд░ рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ 4-5 рд╕реНрддрд░ рдХреА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдХрднреА-рдХрднреА рдЖрдк рдлреЙрд░реНрдо $parents[2].name $parentContext.$parentContext.$parentContext.$index рдпрд╛ $parentContext.$parentContext.$parentContext.$index рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ $parentContext.$parentContext.$parentContext.$index ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдЬрдм рдпрд╣ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреБрдЦреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдиреЙрдХрдЖрдЙрдЯ MVC рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ - рдЕрдм рд╣рд░ рд╕рдВрджрд░реНрдн рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо рд╣реИ! рдФрд░ рдЕрдм рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 @using (var subModel = ko.With(m => m.SubModel)) { using (var subSubModel = subModel.With(m => m.SubSubModel)) { @subSubModel.Html.Span(m => ko.Model.A + " " + subModel.GetIndex() + " " + mB) } } 

рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЦреБрдж рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧреА:
  <span data-bind="text : $parents[1].A()+' '+$parentContext.$index()+' '+B()"></span> 

рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреНрдп рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдмрдиреНрд╕


рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдХрднреА-рдХрднреА рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕рд╛рд░рд╛рдВрд╢


рдЗрд╕рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВред рдиреЙрдХрдЖрдЙрдЯ MVC рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

рд╕рдВрджрд░реНрдн


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


All Articles