Default Content in Master-Page
जैसाकि हमने पिछले Sections में देखा कि Master-Page हमें हमारे Content-Page के लिए एक या एक से अधिक Content Area Specify करने की सुविधा देता है। लेकिन यदि हम चाहैं, तो अपने Master-Page में हम कुछ Default Content भी लिख सकते हैं, जो हर उस Content-Page में Automatically Available हो जाएगा, जिस पर उस Master-Page को Apply किया जाएगा। जबकि Default-Content के रूप में हम जो भी Content लिखना चाहते हैं, उन्हें हमें <asp:ContentPlaceHolder> Web Control के बीच Enclosed करना होता है। जैसे:
File Name: MasterPage.master <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html> <script runat="server"> </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>BccFalna.com: Master Page</title> </head> <body> <table style="width: 100%;" border="1"> <tr> <td colspan="2" style="background: #efefef;"> <h1>BccFalna.com</h1> <h4>TechTalks in Hindi</h4> </td> </tr> <tr> <td style="height: 100px;"> <asp:ContentPlaceHolder ID="cphLeft" runat="server"> This is Default Content of MasterPage </asp:ContentPlaceHolder> </td> <td> <asp:ContentPlaceHolder ID="cphRitht" runat="server"> This is Default Content of MasterPage </asp:ContentPlaceHolder> </td> </tr> <tr> <td colspan="2" style="background: #efefef;"> <h4>Copyright: 2015</h4> </td> </tr> </table> </body> </html>
परिणामस्वरूप जब हम नया Content-Page Create करते हैं, तो उस समय ये Default-Content Automatically उस Newly Create होने वाले Webpage के <asp:Content> Web Control के बीच Enclosed रहता है।
Programmatically Assigning Master Page
हम किसी भी Content-Page के साथ किसी Master-Page को बडी ही आसानी से Programmatically भी Associate कर सकते हैं और ऐसा करने के लिए हमें हमारे Content-Page में Page.MasterPageFile Property को Use करना होता है।
इतना ही नहीं, हम उस स्थिति में भी इस Property का प्रयोग करते हुए Current Content-Page के साथ किसी Master-Page को Associate कर सकते हैं, जबकि उसके @Page Directive में अथवा Web.config File में पहले से किसी Master-Page को Associate किया गया हो।
जब हम किसी Master-Page को किसी Content-Page के साथ Progammatically Associate करना चाहते हैं, तब हमें Page.MasterPageFile Property को Set करने के लिए Page_PreInit Event Handler को Use करना होता है। ये Event हमारे Page की Life-cycle का सबसे पहला Event होता है और केवल ये ही एक ऐसा Event है, जिसके द्वारा Master-Page व Content-Page दोनों को Affect करने वाले Program Logic Codes लिख सकते हैं, क्योंकि इस Event के बाद जितने भी Events Trigger होते हैं, उनमें Master-Page व Content-Page आपस में Combined हो चुके होते हैं, इसलिए दोनों Pages को अलग-अलग मानते हुए Handle करना सम्भव नहीं होता।
इस Event का प्रयोग करते हुए Override किए गए Page_PreInit Event Handler में अपने Content-Page के साथ Master-Page को Associate करने के लिए हम निम्नानुसार Event Handler Create कर सकते हैं:
File Name: Default.aspx <%@ Page Title="Content Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <script runat="server"> protected void Page_PreInit(object sender, EventArgs e) { Page.MasterPageFile = "~/MasterPage.master"; } </script> <asp:content id="Content1" runat="server" contentplaceholderid="cphLeft"> This is Default Content of MasterPage </asp:content> <asp:content id="Content2" runat="server" contentplaceholderid="cphRitht"> This is Default Content of MasterPage </asp:content>
जब हम इस प्रकार से Page_PreInit() Even Handler को Define करते हैं, तब Page के Compile होते समय Content-Page के साथ Master-Page Associate हो जाता है।
Browser – Specific Master Pages
कई बार हमें ऐसे Applications बनाने होते हैं, जिन्हें अलग-अलग Users कई अलग Web Browsers का प्रयोग करते हुए Use करते हैं। यानी कुछ Users Internet Explorer, Opera, Mozilla Firefox Use करते हुए हमारे Application को Use करते हैं, जबकि कुछ लोग Google Chrome, Apple Safari अथवा किसी अन्य Web Browser का प्रयोग करते हैं। साथ ही अलग-अलग लोग समान Web Application को Mobile Phone, Tablet PC, NetBooks, Laptop व Desktop PC जैसी भिन्न Devices का प्रयोग करते हुए हमारे Application को Use करते हैं।
इस वजह से ASP.NET 2.0 में Add किए गए Master-Pages Feature का प्रयोग करते हुए हम अलग-अलग प्रकार के Web Browsers व Devices के लिए अलग-अलग Master-Pages को Apply कर सकते हैं। परिणामस्वरूप Different Web Browser व Devices की Capabilities के अनुसार हम एक ही Web Application को Different तरीके से Viewable बना सकते हैं व User को Best Possible Viewing Experience Provide कर सकते हैं और ऐसा करने के लिए हम हमारे Page Directive को अलग-अलग Web Browsers के लिए निम्नानुसार अलग-अलग Master-Page Set कर सकते हैं:
File Name: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="WebProject.WebForm" MasterPageFile="~/Site.Master" Mozill:MasterFile="~/MozillaSite.Master" Opera:MasterFile="~/OperaSite.Master" %> <asp:Content ID="Content1" runat="server" contentplaceholderid="cphLeft"> </asp:Content> <asp:Content ID="Content2" runat="server" contentplaceholderid="cphRitht"> </asp:Content>
जब हम अपने Web Application में Page Directive को उपरोक्तानुसार Specify करते हैं, तो जब User हमारे इस Webpage को Mozilla FireFox Web Browser द्वारा देखता है, तो उसे दिखाई देने वाले Webpage पर MozillaSite.Master Page Applied रहता है, जबकि वही User यदि इसी Webpage को Opera Web Browser द्वारा देखता है, तो उसे दिखाई देने वाले Webpage पर OperaSite.Master Page Applied रहता है। इनके अलावा यदि User किसी अन्य Web Browser में इस Webpage को देखता है, तो उसे दिखाई देने वाले Webpage पर Site.Master Default Master-Page Applied रहता है
हम जिन विभिन्न Web Browsers के लिए अलग-अलग Master-Page Set कर सकते हैं, उन Supported Web Browsers की List प्राप्त करने के लिए C:\Windows\Microsoft.NET\Framework \2v.0.xxxxx\CONFIG\Browsers Path को Check कर सकते हैं, जहां विभिन्न Supported Web Browsers की List निम्न चित्रानुसार दिखाई देता है:
उपरोक्त चित्र में दिखाई देने वाले विभिन्न Supported Web Browsers के लिए Different Master-Page Set करने हेतु हमें इन नामों को अपने Page Directive में Prefix की तरह Use करना होता है।
उदाहरण के लिए यदि हम Internet Explorer Web Browser के लिए Different Master-Page Set करना चाहते हैं, तो हमें उपरोक्त चित्र में दिखाई देने वाले ie.browser के लिए “IE” Prefix को Page Directive में निम्नानुसार Use करना होता है:
<%@ Page IE:MasterFile="~/IESite.Master" %>
इसके अलावा यदि हम किसी अन्य Web Browser के लिए Master-Page Set करना चाहैं, जो कि .NET द्वारा Provided Web Browsers की List में Exist नहीं है, तो उस स्थिति में हम उस Specific Web Browser की .browser File को उपरोक्त चित्र में दिखाई देने वाले Browsers Folder में Copy कर सकते हैं। एक बार किसी Specific .browser File को यहां Copy कर देने के बाद हम उसे Page Directive में Prefix के रूप में Use कर सकते हैं।
Master-Content Page Event Ordering
जब हम Master-Page व Content-Page को उपयोग में लेते हुए अपना Web Development कर रहे होते हैं, तब ये दोनों ही समान Events जैसे कि Page_Load, Page_LoadComplete आदि के लिए Event Handlers Setup कर सकते हैं। अत: हमारे लिए ये जानना जरूरी होता है कि दोनों Pages के लिए समान Event हेतु Event Handler Specify करने पर किस Page का Event Handler पहले Execute होगा और उनके Execution का क्रम क्या रहेगा।
जब हम Web Browser में किसी Content Page के लिए Request करते हैं, तब Events के Trigger होने का क्रम निम्नानुसार होता है:
- सबसे पहले Master-Page में Contained विभिन्न Server Controls Initialize होते हैं।
- फिर Content-Page में Contained विभिन्न Server Controls Initialize होते हैं।
- फिर Master-Page स्वयं Initialize होता है।
- फिर Content-Page स्वयं Initialize होता है।
- फिर Content-Page Load होता है, जिसके अन्तर्गत Content-Page के लिए Page_Load व Page_LoadComplete Events Fire होते हैं।
- फिर Master-Page Load होता है, जिसके अन्तर्गत Master-Page के लिए Page_Load व Page_LoadComplete Events Fire होते हैं।
- फिर Master-Page के Server Controls, Master-Page पर Load होते हैं।
- और अन्त में Content-Page के Server Controls, Content-Page पर Load होते हैं।
Master-Page व Content-Page Template System को Use करते हुए अपना Web Application Develop करते समय हमें Fire होने वाले विभिन्न Events के Trigger होने के इस क्रम को ध्यान में रखना हमारे लिए काफी जरूरी होता है, अन्यथा हम हमारे Web Page के Flow को ठीक से Control नहीं कर सकते।
क्योंकि यदि हम किसी Master-Page में Specify किए गए Server Control को किसी Specific Content-Page पर Access करना चाहते हैं, तो उस स्थिति में हम हमारे Content-Page के Page_Load Event Handler में Master-Page के Server Controls को Access नहीं कर सकते।
क्योंकि Content-Page का Page_Load Event हमेंशा Master-Page के Page_Load Event से पहले Trigger होता है। इसी वजह से ASP.NET 2.0 में Master-Page Feature के साथ ही Page_LoadComplete नाम के नए Event को Add करना पडा, जो कि Master-Page के Page_Load Event से पहले Execute होता है।
परिणामस्वरूप इस Event को Use करते हुए Create किए गए Event Handler में हम Master-Page के पूरी तरह से Load होने से पहले ही उसके Server Controls को Content-Page में Access व Manipulate कर सकते हैं।
Master Pages and Output Caching
जब हम .aspx Pages के साथ प्रक्रिया कर रहे होते हैं, तब हम ऐसे Webpage में निम्नानुसार तरीके से OutputCache Directive का प्रयोग करते हुए इन पर Caching Apply कर सकते हैं:
<%@ OutputCache Duration="10" Varybyparam="None" %>
ये Directive Specify करने पर हमारा .aspx Page, हमारे Web Server की Memory में 10 Minute के लिए Cache हो जाता है।
यानी यदि हम किसी ऐसे .aspx Page की Request करते हैं, जिसमें इस Directive को Specify किया गया है, तो पहली बार Request Perform होने पर ASP.NET Engine इस Page को Dynamically Generate करेगा, लेकिन इसी Webpage के लिए की गई अगली Request के लिए ASP.NET इस Page को अगले 10 मिनट तक Recreate नहीं करेगा, बल्कि First Request के दौरान जिस Page को Create किया था, उसी Page को अगले 10 मिनट तक आने वाली सभी Requests को Fulfill करने के लिए Serve कर दिया जाता है। इसी प्रक्रिया को Caching कहा जाता है।
सामान्यत: Caching का प्रयोग अपने Web Application के ASP.NET Pages की Performance को Increase करने के लिए किया जाता है और ऐसे Webpages, जिनके Data बहुत कम Change होते हैं, को Cache करके हम इन Dynamic Pages को भी Static Webpages की तरह Serve कर सकते हैं, जिनकी Performance हमेंशा, Dynamically Generate होने वाले Webpages की तुलना में काफी बेहतर होती है।
जब हम Master-Page Feature को Use करते हुए अपना Web Application Create कर रहे होते हैं, तब ये बात हमेंशा ध्यान रखनी चाहि, कि हम केवल Master-Pages पर ही Caching को Apply नहीं कर सकते।
यानी हम स्वयं Master-Page पर OutputCache Directive को Specify नहीं कर सकते और यदि हम ऐसा करते हैं, तो पहली Request तो Normally Fulfill हो जाती है, लेकिन अगली Request Fulfill होते समय Error Return होता है, क्योंकि हमारे Application को Serve करने के लिए Cached Page प्राप्त नहीं होता।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Advance ASP.NET WebForms in Hindi | Page:707 | Format: PDF