ASP.NET Master Page Control From Content Page Access: पिछले Section के Example में हमने Master-Page के Control को Content-Page में Access करने के लिए FindControl() Method को Use किया था। हालांकि वह Method Normal तरीके से काम करते हुए Output Provide कर रहा था, लेकिन उस Approach की एक कमी ये है कि वह Late-Bound Approach Use करता है, इसलिए ये Method उस स्थिति में Fail हो जाता है, जब हम हमारे Markup को अपने Page से Remove कर देते हैं।
इसलिए Defensive Coding Practice को Follow करते हुए हमें हमेंशा FindControl द्वारा Return होने वाली Value को null से Compare करना जरूरी होता है, ताकि हम इस बात को निश्चत कर सकें कि जिस Master-Page Control को हम Content-Page पर Access करना चाहते हैं, वह Master-Page पर Exist है। लेकिन इस तरीके के स्थान पर हम एक और Alternative तरीका Use कर सकते हैं, जो कि Master-Page के Server Control को Content-Page पर Access व Manipulate कर सकते हैं।
इस तरीके के अन्तर्गत हम सामान्यत: Server Control को एक Public Property की तरह Expose कर देते हैं, जिन्हें Content-Page ठीक उसी तरह से Access व Manipulate करने में सक्षम हो जाता है, जिस प्रकार से पिछले Example में हमने Master-Page की Property को Content-Page पर Use किया है। इसे समझने के लिए हम हमारे Master-Page को निम्नानुसार Modify कर सकते हैं:
File Name: MasterPage.master <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html> <script runat="server"> public Label MasterPageLabel { get { return lblGUID; } set { lblGUID = value; } } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { lblGUID.Text = System.Guid.NewGuid().ToString(); } } </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> <b>User's ID: </b> <asp:Label ID="lblGUID" runat="server" Text=""></asp:Label> </td> </tr> <tr> <td style="height: 100px;"> <asp:ContentPlaceHolder ID="cphLeft" runat="server"> </asp:ContentPlaceHolder> </td> <td> <asp:ContentPlaceHolder ID="cphRitht" runat="server"> </asp:ContentPlaceHolder> </td> </tr> <tr> <td colspan="2" style="background: #efefef;"> <h4>Copyright: 2015</h4> </td> </tr> </table> </body> </html>
इस Master-Page में हमने lblGUID नाम का जो Label Control Create किया है, उस Control को एक Public Property की तरह Accessible बनाने के लिए हमने निम्नानुसार Code Specify किया है:
public Label MasterPageLabel { get { return lblGUID; } set { lblGUID = value; } }
परिणामस्वरूप अब हम MasterPageLabel नाम की Property के माध्यम से Master-Page में Specified lblGUID Label Control को किसी भी Content-Page में Access व Manipulate करने के लिए MasterPageLabel Property को ठीक उसी तरह से Use सकते हैं, जिस तरह से lblGUID Control को Use करते हैं, क्योंकि वास्तव में lblGUID का Reference ही MasterPageLabel Property में Store हो जाता है। इसे समझने के लिए हम हमारे Content-Page को निम्नानुसार Modify कर सकते हैं:
File Name: Default.aspx <%@ Page Title="Content Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ MasterType VirtualPath="~/MasterPage.master" %> <script runat="server"> protected void btnSubmit_Click(object sender, EventArgs e) { lblHello.InnerHtml = "<h3>Hello! " + txtName.Text + " How are you?</h3>"; } </script> <asp:Content ID="Content1" runat="server" contentplaceholderid="cphLeft"> <form id="form1" runat="server"> <asp:Label ID="lblName" runat="server" Text=""></asp:Label> <asp:TextBox ID="txtName" runat="server"></asp:TextBox> <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" /> </form> </asp:Content> <asp:Content ID="Content2" runat="server" contentplaceholderid="cphRitht"> <span id="lblHello" runat="server">Hello! How are you?</span> <h3>GUID of MasterPage: <%= Master.MasterPageLabel.Text %></h3> </asp:Content>
जब हम इस Modified Page को Run करते हैं, तो हमें निम्नानुसार Output Page प्राप्त होता है, जहां Master-Page पर स्थित lblGUID Label Control की Text Property में Stored GUID को Master.MasterPageLabel.Text Statement के माध्यम से Access करते हुए Content-Page में Render किया गया है:
इस प्रकार से ये तरीका पहले Discuss किए गए तरीके की तुलना में ज्यादा Effective है, इसलिए जब भी Master-Page के Controls को Content-Page में Access करना हो, इसी तरीके को Use करना चाहिए।
इतना ही नहीं, जिस प्रकार से हमने उपरोक्त तरीकों का प्रयोग करते हुए Master-Page के Controls को Content-Page में Access किया, ठीक उसी तरह से Content-Page के Program Logic द्वारा हम Master-Page के Controls के Contents को भी Change कर सकते हैं। इसे समझने के लिए हम हमारे पिछले Example को ही निम्नानुसार Modify कर सकते हैं:
File Name: MasterPage.master <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html> <script runat="server"> public Label MasterPageLabel { get { return lblGUID; } set { lblGUID = value; } } </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> <b>User's ID: </b> <asp:Label ID="lblGUID" runat="server" Text=""></asp:Label> </td> </tr> <tr> <td style="height: 100px;"> <asp:ContentPlaceHolder ID="cphLeft" runat="server"> </asp:ContentPlaceHolder> </td> <td> <asp:ContentPlaceHolder ID="cphRitht" runat="server"> </asp:ContentPlaceHolder> </td> </tr> <tr> <td colspan="2" style="background: #efefef;"> <h4>Copyright: 2015</h4> </td> </tr> </table> </body> </html> File Name: Default.aspx <%@ Page Title="Content Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ MasterType VirtualPath="~/MasterPage.master" %> <script runat="server"> protected void btnSubmit_Click(object sender, EventArgs e) { lblHello.InnerHtml = "<h3>Hello! " + txtName.Text + " How are you?</h3>"; } protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Master.MasterPageLabel.Text = System.Guid.NewGuid().ToString(); } } </script> …
इस Modified Example में हमने GUID Generate करने से सम्बंधित Event Handler Code को Master-Page से Content-Page में Shift कर दिया है। जिसकी वजह से GUID Generate करने का काम Content-Page करने लगता है।
लेकिन इस Generated GUID को फिर Master-Page के lblGUID Label Control की Text Property में Store करने के लिए हमने Master-Page में निम्नानुसार MasterPageLabel नाम की Property को Specify किया है, जो कि इसी Master-Page पर Placed lblGUID Label Control की Value को Get/Set करता है:
public Label MasterPageLabel { get { return lblGUID; } set { lblGUID = value; } }
परिणामस्वरूप जब Content-Page में निम्न Statement Use करते हुए Master.MasterPageLabel Property की Text Property को Generated GUID द्वारा Set किया जाता है:
Master.MasterPageLabel.Text = System.Guid.NewGuid().ToString();
तो वह GUID Master-Page के lblGUID Label Control की Text Property में Set हो जाता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Advance ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Advance ASP.NET WebForms in Hindi | Page:707 | Format: PDF