Working with Server Side HTML Controls

Working with Server Side HTML Controls – जब हम Code-Behind Class के माध्‍यम से अपने ASP.NET Webpage के  HTML Controls को Access व Manipulate करना चाहते हैं, तब हमें उन  HTML Controls के साथ  runat=”server” id Attribute को Specify करना जरूरी होता है।

क्योंकि जिस  HTML Element के साथ  runat=”server” Attribute को Specify किया जाता है, उस  HTML Element के लिए Web Server को इस बात का Instruction मिलता है कि उसे Code-Behind Class द्वारा Server Side में Access व Manipulate किया जा सकता है।

जबकि id Attribute में हम जो नाम Specify करते हैं, उस नाम द्वारा ही उस Particular  HTML Element को Server Side में Identify करने के लिए Use किया जाता है, जिसे Code-Behind Class File के Event Handler Methods द्वारा Access व Manipulate किया जाना होता है।

अन्‍य शब्दों में कहें तो id Attribute में हम जो नाम Specify करते हैं, Webpage के Parsing के दौरान Create होने वाली Temporary Class में Exactly उसी नाम का एक Field Create होता है, जो कि Code-Behind Class में किसी Particular HTML Element को किसी Particular  HTML Control के रूप में Represent करता है।

यानी जब हम Web Server हमारे Dynamic Webpage की Parsing करता है, तो Parsing के दौरान हमारे Webpage पर जितने भी ऐसे  HTML Elements होते हैं, जिन में runat=”server” Attribute को Specify किया गया होता है, उन सभी Elements के id Attribute में Specified नाम, Create होने वाली Temporary Class के Fields के रूप में Create हो जाते हैं, जिन्हें Code-Behind Class File में Controls या Objects की तरह Access व Manipulate किया जा सकता है।

चूंकि हमने हमारे Default.aspx Webpage पर निम्नानुसार तीन Elements को runat=”server” Attribute के साथ Specify किया है, जिन्हें Code-Behind Class द्वारा Access किया जाना है:


<title  id="pageTitle" runat="server"></title>
<img id="imgBCL" runat="server"/>
<a id="secondPageLink" runat="server"/>

इसलिए Create होने वाली Temporary Class में pageTitle, imgBCL secondPageLink नाम के तीन Fields Create हो जाते हैं और क्योंकि Code-Behind Class File में हमें HTML Elements को C#/VB जैसी .NET Supported Object Oriented Programming Language द्वारा Access करना होता है, इसलिए विभिन्न  HTML Elements को एक Object के रूप में Represent करने के लिए .NET Framework में System.Web.UI.htmlControls नाम के Namespace को Specify किया गया है, जिसमें हर  HTML Element को Represent करने के लिए एक Class Defined है।

उदाहरण के लिए हमारे Page पर यदि हम किसी<img> Element के साथ  runat=”server” Specify करते हैं, तो इस Element को Object की तरह Represent करने का काम htmlImage Class करता है, जबकि Anchor Element को Represent करने का काम htmlAnchor Class करता है।

जब हम Visual Studio का प्रयोग करते हुए अपना Web Development करते हैं, तो Visual Studio तब तक किसी अन्‍य Partial Class के बारे में नहीं जानता, जब तक कि हम हमारे Web Application को एक बार Run नहीं कर देते।

परिणामस्वरूप एक बार Web Application को Run करने से पहले Server Side में Execute होने वाले विभिन्न  HTML id Fields Unknown होने की वजह से Error की तरह Reflect होते हैं। लेकिन फिर भी हमारा Web Application बिना किसी परेशानी के Normal तरीके से Compile व Run होता है, हालांकि जब हम अगली बार समान Project को दोबारा Run करते हैं, तो दुबारा हमें वे Error Show नहीं होते और यदि होते भी हैं, तो हमें उनकी चिन्ता करने की जरूरत नहीं होती।

System.Web.UI.htmlControls Namespace में Exist विभिन्न  HTML Control Related Classes निम्नानुसार हैं, जिनकी Detailed जानकारी प्राप्त करने के लिए हम Visual Studio के VIEW => Object Browser Option को उपयोग में ले सकते हैं:

 htmlAnchor<a>
 htmlButton<button>
 htmlContainerControl 
 htmlControl 
 htmlEmptyTagControlBuilder 
 htmlForm<form>
 htmlGenericControl<ol>, <ul>, <li>, etc…
 htmlHead<head>
 htmlHeadBuilder 
 htmlImage<img>
 htmlInputButton<input type=”button”>
 htmlInputCheckBox<input type=”option”>
 htmlInputControl 
 htmlInputFile<input type=”file”>
 htmlInputHidden<input type=”hidden”>
 htmlInputImage<input type=”image”>
 htmlInputPassword<input type=”password”>
 htmlInputRadioButton<input type=”radio”>
 htmlInputReset<input type=”reset”>
 htmlInputSubmit<input type=”submit”>
 htmlInputText<input type=”text”>
 htmlLink<Link>
 htmlMeta<meta>
HtmlSelect<select>
HtmlSelectBuilder 
 htmlTable<table>
htmlTable.htmlTableRowControlCollection 
 htmlTableCell<td>
 htmlTableCellCollection 
 htmlTableRow<tr>
 htmlTableRow.htmlTableCellControlCollection 
 htmlTableRowCollection 
 htmlTextArea<textarea>
 htmlTitle<title>

जब किसी ऐसे  HTML Element को Server Side में Handle करना होता है, जिससे Associated कोई  HTML Control Class Exist नहीं है, तो इस प्रकार के  HTML Elements के साथ काम करने के लिए हम htmlGenericControl Class को Use कर सकते हैं।

चूंकि हम हमारे Webpage पर जिन Elements के id व  runat=”server” Attributes को Specify करते हैं, Generate होने Temporary Partial Class में इस id Attribute के नाम के समान नाम का एक Field Create हो जाता है, जिसे हम हमारी Code-Behind Class File में Use करते हुएWebpage के  HTML Element को Control कर सकते हैं।

इसलिए यदि हम हमारे Webpage पर स्थित<title> Element को Code-Behind Class द्वारा Access करना चाहते हैं, तो इस जरूरत को हम निम्‍नानुसार pageTitle Control द्वारा Fulfill कर सकते हैं, जो कि हमारे Webpage पर Specified <title> Element के id Attribute में Specify किया गया नाम है:

pageTitle.InnerText = “This is dynamic Title.”;

इसी तरह से यदि हम चाहें तो imgBCL secondPageLink नाम के माध्‍यम से Code-Behind Class File द्वारा Webpage पर Specified <img> व <a> Elements को निम्‍नानुसार Program Logic Statements द्वारा Control कर सकते हैं:


imgBCL.Alt = "This is Dynamic Alternative Text";
imgBCL.Src = "images/BCL.png";
secondPageLink.InnerText = "Click to load another  HTML Page.";
secondPageLink.HRef = "2ndHTMLPage. html";

यानी हम हमारी Code-Behind Class के Page_Load() Event को निम्नानुसार Modify कर सकते हैं:


protectedvoid Page_Load(object sender, EventArgs e)
{
pageTitle.Inner html = "This is dynamic Title”;
imgBCL.Src = "images/BCL.png”;
imgBCL.Alt = "This is Dynamic Alternative Text”;
secondPageLink.InnerText = "Click to load another  HTML Page.”;
secondPageLink.HRef = "2ndHTMLPage. html”;
}

चूंकि, Code-Behind File द्वारा जिन  HTML Elements को  HTML Controls के माध्‍यम से Access व Manipulate किया जाता है, वे सभी Controls, Webpage के किसी न किसी  HTML Element को Represent करते हैं। इसलिए एक  HTML Element जिन Attributes को Support करता है, उन सभी Attributes को  HTML Control की Properties के रूप में Server Side में Specify किया जा सकता है।

उदाहरण के लिए किसी Webpage में <img> Element src Attribute के माध्‍यम से उस Image का Path Specify करता है, जिसे Render किया जाना है। ठीक इसी तरह से जब हम Web Server द्वारा Dynamically किसी <img> Element केsrc Attribute को Set करना चाहते हैं, तब भी हमें Src Property को ही Use करना होता है। जैसे:

imgBCL.Src = “images/BCL.png”;

इसी तरह से जब हम<img> Element केalt Attribute को Dynamically Setup करना चाहते हैं, तब भी हमें Alt Property को ही Use करना होता है। जैसे:

imgBCL.Alt = “This is Dynamic Alternative Text”;

इसी प्रकार से जब हम किसी Anchor Element के href Attribute में किसी दूसरे Page का HyperLink Assign करना चाहते हैं, तब भी हमें निम्‍नानुसार HRef Property को ही Use करना होता है:

secondPageLink.HRef = “2ndHTMLPage. html”;

जबकि किसी भी Element के Content को Set करने के लिए हम InnerText या Inner html Property को उपयोग में ले सकते हैं। जैसे:

secondPageLink.InnerText = “Click to load another  HTML Page.”;

परिणामस्वरूप जब हम हमारे इस Modified Code-Behind Class File वाले Webpage को Run करते हैं, तो हमें निम्नानुसार Output प्राप्त होता है:

Working with Server Side HTML Controls - ASP.NET WebForms in Hindi

हम समझ सकते हैं कि इस बार हमें जो Output प्राप्त हो रहा है, उसमें ज्यादातर Output Server Side में Specify की गई Code-Behind Class File में Defined Page_Load() Event के कारण प्राप्त हो रहा है। क्योंकि यदि हम इस Page के Source Code देखें, तो इसका Source Code कुछ निम्नानुसार दिखाई देता है:

Working with Server Side HTML Controls - ASP.NET WebForms in Hindi

हम देख सकते हैं कि इस Parsed Source Code में काफी कुछ ऐसा Content है, जो हमारे Original Webpage में हमने Specify नहीं किया था। यानी यदि हम हमारा Original Webpage Markup देखें, तो ये कुछ निम्नानुसार है:

Working with Server Side HTML Controls - ASP.NET WebForms in Hindi

Original Webpage MarkupParsed Source Code दोनों में उपरोक्तानुसार दिखाई देने वाला अन्तर इसीलिए दिखाई दे रहा है, क्योंकि Original Markup में हमने <title> Element को निम्नानुसार तरीके से लिखते हुए उसमें कोई Content Specify नहीं किया है, बल्कि केवल id runat Attribute ही Specify किया गया है:

<title  id=“pageTitle” runat=”server”></title>

जबकि इस id के माध्‍यम से इस<title> Element को निम्नानुसार Code-Behind Class में Specified Code द्वारा Dynamically Setup किया गया है:

pageTitle.InnerText = “This is dynamic Title.”;

परिणामस्वरूप Parsing के बाद हमें हमारा<title> Element निम्नानुसार दिखाई देता है:

<title  id=”pageTitle”>This is dynamic Title</title>

इसी तरह से Original  HTML Markup में हमने <img> Elementको Original Markup File में निम्नानुसार Specify किया है:

<img id=“imgBCL” runat=”server”/>

जिसे Code-Behind Class केPage_Load() Event Handler द्वारा Dynamically निम्नानुसार Statements के माध्‍यम से Modify कर दिया जाता है:

imgBCL.Src = “images/BCL.png”;
imgBCL.Alt = “This is Dynamic Alternative Text”;

परिणामस्वरूप Parsing के बाद हमें हमारा<img> Element निम्नानुसार दिखाई देता है:

<img src=”images/BCL.png”  id=”imgBCL” alt=”This is Dynamic Alternative Text” />

इसी तरह से Original  HTML Markup में हमने<a> Element को Original Markup File में निम्नानुसार Specify किया है:

<a id=”secondPageLink” runat=”server”/>

जिसे Code-Behind Class केPage_Load() Event Handler द्वारा Dynamically निम्नानुसार Statements के माध्‍यम से Modify कर दिया जाता है:

secondPageLink.InnerText = “Click to load another  HTML Page.”;
secondPageLink.HRef = “2ndHTMLPage. html”;

परिणामस्वरूप Parsing के बाद हमें हमारा<a> Element निम्नानुसार दिखाई देता है:

<a href=”2ndHTMLPage. html”  id=”secondPageLink”>Click to load another  HTML Page.</a>

इस प्रकार से Web Server द्वारा Code-Behind Class के आधार पर हमारे Source  HTML Codes को Parsing के दौरान Modify किया जाता है जो कि हमें प्राप्त होने वाले Resultant Response Page से Actual Source  HTML Page की तुलना में काफी अलग होता है।

InnerTextInner html में मुख्‍य अन्तर यही है कि Inner html Property Use करने पर हम Raw HTML Content को String के रूप में Specify कर सकते हैं, जो कि Webpage की Rendering के दौरान  HTML Markup की तरह ही Parse होता है, लेकिन InnerText Property Use करने पर हम यदि Raw  HTML Content को String के रूप में Specify करते हैं, तो Web Browser इस प्रकार के Raw  HTML Content को  HTML Markup की तरह ही Parse नहीं करता बल्कि सारे Markup को Normal Text की तरह Render कर देता है।

उदाहरण के लिए यदि हम उपरोक्त Statement को निम्नानुसार Modify कर दें, जिसमें Raw  HTML Included हो-

secondPageLink.InnerText = “<b>Click to load another  HTML Page.</b>”;

तो हमें निम्नानुसार Output प्राप्त होता है:

Working with Server Side HTML Controls - ASP.NET WebForms in Hindi

लेकिन यदि हम इसी Statement को निम्‍नानुसार Inner html Property के साथ Specify करें-

secondPageLink.Inner html = “<b>Click to load another  HTML Page.</b>“;

तो हमें निम्नानुसार Output प्राप्त होता है:

Working with Server Side HTML Controls - ASP.NET WebForms in Hindi

हम समझ सकते हैं कि InnerText Use करने पर Specify किया गया Row  HTML, Web Browser द्वारा Parse नहीं किया जाता, बल्कि Row Text की तरह Output में Display कर दिया जाता है। लेकिन Inner html Use करने पर Specify किया गया Row  HTML, Web Browser द्वारा Parse किया जाता है। परिणामस्वरूप Web Browser द्वारा Markup की Parsing द्वारा Generate होने वाला Effect Render होता है, यानी हमें हमारा Content Heading3 Level के रूप में दिखाई देता है।

चूंकि ASP.NET हमें एक ही काम को करने के कई तरीके Provide करता है, इसलिए हम हमारी जरूरत व सुविधानुसार जिस तरीके को Use करते हुए अपनी जरूरत पूरी करना चाहें, उस तरीके को Use कर सकते हैं। उदाहरण के लिए इस Chapter में भी हमने Inline Code Block Code-Behind Class File के रूप में दो तरीकों से एक Dynamic ASP.NET Webpage Create किया है।

साथ ही Visual Studio का प्रयोग करते हुए हम कई प्रकार के ASP.NET Projects Create कर सकते हैं, लेकिन सभी Projects Internally उसी तरह से काम करते हैं, जिस तरह से हमने इस Chapter में Discuss किया है।

इसलिए ASP.NET Application Create करने के लिए किसी एक Single Approach पर निर्भर न रहते हुए, विभिन्न Approaches को सीखना व समझना ही ASP.NET में महारथ हासिल करने का सबसे उपयुक्त तरीका है। ताकि हम इस बात को बेहतर तरीके से समझ सकें कि किस प्रकार की जरूरत को पूरा करने के लिए कौनसा Approach सबसे उपयुक्त हो सकता है, क्योंकि अलग-अलग तरह की जरूरतों के आधार पर अलग-अलग Approach को ही Use करने की जरूरत पडती है ताकि कम से कम समय में ज्यादा से ज्यादा अच्‍छा Application Create किया जा सके।


error: Content is protected !!

Special Discount Offer

खरीदिए एक से ज्‍यादा EBooks, और पाईए ₹100 से ₹1200 तक का Extra Cash Discount

Discount Coupon Codes