500 likes | 600 Views
Szerver oldali vezérlők + oldal használata. ASP.NET 4.0 KrZ. Oldal ( Page ) elem. public class Page : TemplateControl , IHttpHandler { ... }. Header infok ( HtmlHead ). nincs head rész a kódban de nyilván generál a html kódba eseménykezelőkben a header . Title Description
E N D
Szerver oldali vezérlők + oldal használata ASP.NET 4.0 KrZ
Oldal (Page) elem public class Page : TemplateControl, IHttpHandler { ... }
Headerinfok (HtmlHead) • nincs head rész a kódban • de nyilván generál a html kódba • eseménykezelőkben a header. • Title • Description • Keywords • Metainformációkat is lehet HtmlMetametaTag = new HtmlMeta(); metaTag.Name = "robots"; metaTag.Content = "noindex"; Page.Header.Controls.Add(metaTag);
Vezérlők dinamikus létrehozása protected void Page_Load(object sender, System.EventArgs e) { Button newButton = new Button(); newButton.Text= "* Dynamic Button *"; newButton.ID = "newButton"; Panel1.Controls.Add(newButton); }
Vezérlők dinamikus törlése Button foundButton = (Button)Page.FindControl("newButton"); if (foundButton != null) { foundButton.Parent.Controls.Remove(foundButton); }
Oldal (Page) osztályhasznos tulajdonságok • Session • Application • Cache • Request • Response • Server • User (System.Security.Principal.IPrincipal) • Trace • Profile
Session (System.Web.SessionState.HttpSessionState) • név – érték párban tárolódik (dictionary-style)
Application(System.Web.HttpApplicationState) • név – érték párban tárolódik (dictionary-style) • A webalkalmazásra nézve globális
Cache(System.Web.Caching.Cache) • globális adat, ami jobban skálázható. • ASP.NET kisöpri amikor a szerver memóriára van szüksége. • név – érték párban tárolódik (dictionary-style) • definiálni lehet meddig legyen elérhető • függőséget lehet beállítani
Kérés(System.Web.HttpRequest) • Nincs olyan jelentősége, mint máshol • használjuk helyette a szerver vezérlőket • Hasznos elemei • QueryString • IsLocal • IsAuthenticated • IsSecureConnection • Headers,ServerVariables
Válasz(System.Web.HttpResponse) • Nincs olyan jelentősége, mint máshol • Használjuk helyette a szerver vezérlőket • Hasznos elemei: • Redirect() • ContentType • OutputStream • Write() • BinaryWrite(),WriteFile()
Szerver(System.Web.HttpServerUtility) • HtmlEncode(),HtmlDecode() • UrlEncode(),UrlDecode() • MapPath() • Transfer()
Nyomkövetés(System.Web.TraceContext) • debuggolás, nyomkövetés • Engedélyezés: • <%@ Page … Trace="true" %> • Trace.IsEnabled = true; • Listázás időpecsét alapján, de át lehet írni TraceMode.SortByCategory • Trace.Write() ,Trace.Warn() • minden figyelőnek (Listener) elküldi • HTML kikódolt (mehet a kódba direkt) • Ha tiltott a szolgáltatás, akkor nem fut le. • trace.axd
HTML vezérlők • Alapvetően java script-el használjuk. • Egyesek a toolbox-ból is elérhetőek (drag & drop). • Mások nem, ezeket be kell gépelni. • Szerver oldali logikában használhatjuk runat=”server” • <form>tag-on belül,amely szinténrunat="server". • Jól átgondolt osztályok tokozzák a szerver oldalon. • Lehet szerver oldali eseményük. • kényelmetlen: nincs teljes kódgenerálás, kódkiegészítés. • Hasonló használat, mint a web vezérlők. • Adatkötés lehetséges a tulajdonságaira.
HTML vezérlők • HTML vezérlők (HtmlControl) • HTML input vezérlők (HtmlInputControl) • valueattribútum adja a tartalmát • HTML konténer vezérlők (HtmlContainerControl) • van kezdő és záró tagjuk • InnerHtml • InnerText
HTML szerver vezérlők használata • Indexer-eken keresztül • stílusText1.Style["font-size"] = "20px"; • attribútumText1.Attributes["onfocus"] = "alert(Text1.value)"; • Metódusokon keresztül Text1.Style.AddText1.Attributes.Add
HTML szerver vezérlők szerver eseménykezelése • Néhány vezérlő esetén. • Szerver oldali logika kezelheti. • Kérés küldéssel jár. • Új attribútum formájában. • Ha van kliens és van szerver esemény is ugyanarra, akkor a kliens hamarabb fut le.
HTML szerver vezérlők szerver eseményei • ServerClick (submit-ol is) • HtmlAnchor, • HtmlButton, • HtmlInputButton, • HtmlInputSubmit, • HtmlInputImage • ServerChange(ha volt submit) • HtmlInputText, • HtmlInputCheckBox, • HtmlInputRadioButton, • HtmlInputHidden, • HtmlSelect, • HtmlTextArea
HTML vezérlők feladat I • Az oldal elejére írassa ki a kiszolgálás pontos idejét! (Ezzel ellenőrizzük, hogy ment e kérés.) • Oldal készítése, amelyen van egy select, és egy beviteli mező. • Kliens szkript segítségével: ha a select tartalma változik, frissítsük az új értékére a beviteli mezőt
web szerver vezérlők • Böngészőfüggő html kimenet • Kényelmes használat, teljes kódkiegészítés. • Sajátos megjelenés, stílus. • Teljes szerver oldali esemény model. • Komplex vezérlők (pl. Calendar), melyek normál html kóddá alakulnak. • http://msdn.microsoft.com/en-us/library/bb386416(v=vs.100).aspx
MultiView deklaráció <asp:MultiViewID="MultiView1"runat="server"> <asp:ViewID="View1"runat="server"> <asp:PanelID="Panel1"runat="server„BackColor="#FF6600"> <asp:RadioButtonID="RadioButton1"runat="server"/> </asp:Panel> </asp:View> <asp:ViewID="View2"runat="server"> <asp:PanelID="Panel2"runat="server"BackColor="#0066FF"> <asp:DropDownListID="DropDownList1"runat="server"> </asp:DropDownList> </asp:Panel> </asp:View> </asp:MultiView>
MultiView tartalom váltás <asp:DropDownListID="DropDownList2„runat="server"AutoPostBack="True"onselectedindexchanged="DropDownList2_SelectedIndexChanged"> </asp:DropDownList> protectedvoid DropDownList2_SelectedIndexChanged(object sender, EventArgs e) { MultiView1.ActiveViewIndex = DropDownList2.SelectedIndex; }
Gazdag (Rich) vezérlők • AdRotator: bannerek listájából véletlenszerűen megjelenít (XML alapján) • Calendar • MultiView, View, Wizard • Substitution • Xml megjelenít xslt segítségével
Adatok ellenőrzése • <asp:RequiredFieldValidator> • <asp:RangeValidator> • <asp:CompareValidator> • <asp:RegularExpressionValidator> • <asp:CustomValidator> • <asp:ValidationSummary>
Ellenőrzés szabályai • Egy vezérlőhöz több ellenőrző is lehet. • Minden vezérlőnek van egy kiemelt tulajdonsága • ValidationProperty attribútummal jelölt pl:[ValidationProperty("Text")] • Ellenőrzők ennek értékét figyelik. • A web vezérlőknek van CausesValidation tulajdonsága • ha false nincs adatellenőrzés • ha true (alapértelmezett a submit-olóknál): minden ellenőrző lefut • Szerver és kliens oldalon is lehetséges.
Minden ellenőrző őseBaseValidator • ControlToValidate: referencia az ellenőrzött vezérlőre. • Display: static vagy dynamic hogyan jelenjen meg a hibaszöveg • EnableClientScript (true a default) • ErrorMessage: hibaszöveg ami a ValidationSummary-ban jelenik meg ha kell. • Text: ezen vezérlő helyén jelenik meg ha kell. • IsValid • SetFocusOnError: ráállítja a fókuszt a megjelölt vezérlőre. • Validate(): Ez hívódik automatikusan, de hívható közvetlenül is.
RequiredFieldValidator <asp:TextBoxrunat="server"ID="Name"/> <asp:RequiredFieldValidatorID="RequiredFieldValidator1"runat="server" ControlToValidate="Name"ErrorMessage="Name is required" Display="dynamic">* </asp:RequiredFieldValidator>
RangeValidator I MinimumValue, MaximumValue, Type
RangeValidator II <asp:TextBoxrunat="server"ID="DayOff"/> <asp:RangeValidatorID="RangeValidator1"runat="server"Display="dynamic" ControlToValidate="DayOff"Type="Date" ErrorMessage="Day Off is not within the valid interval" MinimumValue="2008-08-05"MaximumValue="2008-08-20">* </asp:RangeValidator>
CompareValidator • Két vezérlő tartalmát, vagy egy fix érték és a vezérlő tartalma hasonlítja össze. • ControlToCompare • ValueToCompare • Type tulajdonság
CompareValidator III <asp:TextBoxrunat="server"ID="Age"/> <asp:CompareValidatorID="CompareValidator1"runat="server"Display="dynamic" ControlToValidate="Age"ValueToCompare="18" ErrorMessage="You must be at least 18 years old" Type="Integer"Operator="GreaterThanEqual">* </asp:CompareValidator>
CompareValidator IV <asp:TextBoxrunat="server"TextMode="Password"ID="Password"/> <asp:TextBoxrunat="server"TextMode="Password"ID="Password2"/> <asp:CompareValidatorID="CompareValidator2"runat="server" ControlToValidate="Password2"ControlToCompare="Password" ErrorMessage="The passwords don't match" Type="String"Display="dynamic"> <imgsrc="imgError.gif"alt="The passwords don't match"/> </asp:CompareValidator>
RegularExpressionValidator <asp:TextBoxrunat="server"ID="Email"/> <asp:RegularExpressionValidatorID="RegularExpressionValidator1"runat="server" ControlToValidate="Email"ValidationExpression=".*@.{2,}\..{2,}" ErrorMessage="E-mail is not in a valid format"Display="dynamic">* </asp:RegularExpressionValidator>
CustomValidator • Ha a beépített ellenőrzők már nem elegendőek. • Lehet kliens vagy szerver oldali vezérlés. • Ellenőrzés hasonló. Metódus 2 paraméterrel:
CustomValidator <asp:TextBoxrunat="server"ID="EmpID"/> <asp:CustomValidatorID="CustomValidator1"runat="server"ControlToValidate="EmpID" ClientValidationFunction="EmpIDClientValidate"OnServerValidate="EmpIDServerValidate" ErrorMessage="ID must be a multiple of 5"Display="dynamic">* </asp:CustomValidator>
CustomValidator kliens oldal <script type="text/javascript"> function EmpIDClientValidate(ctl, args) { // the value is a multiple of 5 if the modulus by 5 is 0 args.IsValid=(args.Value%5 == 0); } </script>
CustomValidator szerver oldal • ServerValidate esemény protectedvoidEmpIDServerValidate(object sender, ServerValidateEventArgsargs) { try { args.IsValid= (int.Parse(args.Value) % 5 == 0); } catch { args.IsValid= false; } }
ValidationSummary • Nem végez ellenőrzést. • Megjeleníti az összes vezérlő ErrorMessage tulajdonságát. • Ha ShowMessageBox igaz, akkor megjelenik a kliens oldalon. Ha nem, akkor az oldalon az adott helyen. • DisplayMode tulajdonság a megjelenés módját szabályozza: • HeaderText: Bevezető szöveget definiál.
ASP.NET alkalmazás • Virtuális mappa tartozik hozzá. • Minden webapp külön alkalmazás domain. • Általában egy webapp több oldal, ezért az oldalak egy alkalmazás domain. • Közös konfiguráció, • Közös erőforrások, • Közös globális események
Webapp elemei • Web formok : *.aspx • Mester oldalak: *.master • Web szervízek: *.asmx • Global.asax: globális események kezelése • Konfig fájlok: web.xml • Code-behind fájlok: forrás fájlok, melyek dll szerelvények készülnek belőlük, gépi kódként futnak. • Egyéb külső komponensek: melyek dll szerelvények készülnek belőlük, gépi kódként futnak.
Webapp újraindítása • A rendszer újraindítja: • Ha már túl sokszor lefordították a fájlokat (web.config) • A mappa elérési útvonala változik, • global.asax, machine.config, web.config változott, • alkalmazás pool beállításai változtak, • bináris szerelvények változnak, • túl sok fájl változott a webappban • programból hívták a HttpRuntime.UnloadAppDomain
global.asax • kéréshez kapcsolódó eseménykezelők, • bizonyos feltételekre reagáló eseménykezelők • Application_Start • Session_Start • Application_Error: kezeletlen kivétel • Session_End • Application_End • Application_Disposed: biztos, ami biztos takarítás
Oldal életciklus szakaszaihttp://msdn.microsoft.com/en-us/library/ms178472.aspx
Állapot menedzsmentViewState • Beépített mechanizmus, • de kiterjeszthető • saját elemeket is kezel, ViewState[control.ID] = érték • ki lehet olvasni kódból is explicit módon, • objektum is lehet benne • Minden változott értéket ment/tölt (nem csak szöveg). • 4.0-tól kezdődően szelektív támogatás is lehet. • Ne használjuk, ha az érték amúgy is jön!
ViewState • Tiltani lehet • elemenként, • egész oldalra <%@ Page Language="C#" EnableViewState="false" ... %>, • konfigurációból:<configuration><system.web><pages enableViewState="false" /></system.web></configuration> • Öröklődik az EnableViewState (inherited)
Objektum tárolása a ViewState-benObjektum sorosíthatósága [Serializable] publicclassCustomer { publicstringFirstName; publicstringLastName; public Customer(stringfirstName, stringlastName) { FirstName = firstName; LastName = lastName; } }
Objektum tárolása a ViewState-benObjektum tárolása, kivétele Customercust = newCustomer(”név",”név2"); ViewState["CurrentCustomer"] = cust; cust = (Customer)ViewState["CurrentCustomer"];