рдХреНрдпрд╛ рдЖрдк рдХрднреА ASP.NET рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЖрдП рд╣реИрдВ?
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдЖрдк рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ?
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдШрдЯрдирд╛рдУрдВ, рддрд░реНрдХ рдФрд░ рдкреГрд╖реНрда рд╡рд░реНрдЧреЛрдВ рдХреЗ рднреАрддрд░ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЗ рдПрдХ рдЬрдЯрд┐рд▓ рдЕрдВрддрд░ рд╕реЗрдЯ рдореЗрдВ рдЖрдПред
рдпрд╣ рдЖрд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрд╕реА рдореЙрдбрд▓-рд╡реНрдпреВ-рдкреНрд░рд╕реНрддреЛрддрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЬреАрд╡рди рдХреЛ рдХреИрд╕реЗ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдорд╛рдиреВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдПрдорд╡реАрд╕реА рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред
рдореИрдВ рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд╕рд╛рде MVC рдХреЛ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХреНрд▓рд╛рд╕рд┐рдХ ASP.NET рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
1. рд░реВрдЯрд┐рдВрдЧ - рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╛рдЗрдЯ рдХрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЯреНрд░реА рдПрдХ рд╣реА рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
2. рджреЗрдЦреЗрдВ рдФрд░ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп - рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрддрд┐
рдХреНрд░рдорд╢рдГ рдкреГрд╖реНрда рдкреГрд╖реНрда рдФрд░ UserControl, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИрдВред
3. рдореЙрдбрд▓ - рдбреЗрдЯрд╛
рдореЙрдбрд▓ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред
4. рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ - рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмреАрдЪ рдЧреЛрдВрдж
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, ASP.NET рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИред
рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред
рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХрд┐рддрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдЖрдо рд╕рд╣рдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореМрдЬреВрджрд╛ ASP.NET рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ, рдЬрд┐рд╕рдореЗрдВ рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдореМрдЬреВрдж рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рд╣рдо рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ PageView рдФрд░ UserControlView:
public abstract class PageView<T>: Page where T : class { private T _presenter; public T Presenter { get { return _presenter ?? (_presenter = CreatePresenter()); } } protected abstract T CreatePresenter(); } public class UserControlView<T> : UserControl { public T Presenter { get; set; } }
PageView рд╡рд░реНрдЧ рд╕рд╛рд░ рд╣реИ рдФрд░ рдПрдХ рд╡рдВрд╢ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреА рд╕реНрд╡рддрдВрддреНрд░ рд░рдЪрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
UserControlView рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИ - рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛, рдЬреЛ рдЙрд╕ рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдореНрдн рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рд╕реНрдерд┐рдд рд╣реИред
рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВред
рдПрдХ рд╕реВрдЪреА рдФрд░ рдЙрд╕рдХреЗ рддрддреНрд╡ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
List.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="WebApplication1.Client.List" EnableViewState="false" %> <%@ Register TagPrefix="ctl" TagName="Item" Src="Details.ascx" %> <asp:Content ContentPlaceHolderID="MainContent" runat="server"> <asp:Repeater ID="ctlList" runat="server" > <ItemTemplate> <ctl:Item runat="server" Presenter="<%# Container.DataItem %>" /> </ItemTemplate> </asp:Repeater> </asp:Content>
List.aspx.cs
public partial class List : PageView<ListPresenter> { protected override ListPresenter CreatePresenter() { return new ListPresenter(); } protected override void OnLoad(System.EventArgs e) { base.OnLoad(e); ctlList.DataSource = Presenter.Items; ctlList.DataBind(); } }
Details.aspx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Details.ascx.cs" Inherits="WebApplication1.Client.Details" %> <asp:TextBox runat="server" Text="<%# Presenter.Model.FirstName %>" OnTextChanged="OnFirstNameChanged" /> <asp:TextBox runat="server" Text="<%# Presenter.Model.LastName %>" OnTextChanged="OnLastNameChanged" /> <asp:Button runat="server" Text="Save" OnClick="OnSave" /> <br />
Detalis.aspx.cs
public partial class Details : UserControlView<DetailsPresenter> { protected void OnFirstNameChanged(object sender, System.EventArgs e) { Presenter.Model.FirstName = ((TextBox) sender).Text; } protected void OnLastNameChanged(object sender, System.EventArgs e) { Presenter.Model.LastName = ((TextBox)sender).Text; } protected void OnSave(object sender, System.EventArgs e) { Presenter.Save(); } }
рд╡реИрд╕реЗ, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдкреГрд╖реНрда рдкрд░ ViewState рдмрдВрдж рд╣реИред
рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн:
1. рдкреЗрдЬ рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
2. рдЖрдк рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
3. рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдлреЗрд╕ (рд╡реЗрдм, рд╡рд┐рди, рдореЛрдмрд╛рдЗрд▓) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
4. рдиреВрдбрд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред