दिलचस्प पोस्ट
क्यों System.nanoTime () तरीका धीमा है (प्रदर्शन में) System.currentTimeMillis () की तुलना में? क्या std :: stack iterators बेनकाब? Fsharp.Core का सही संस्करण चल बिन्दु गणित टूट गया है? एक अन्य चर द्वारा समूहीकृत किए गए संचयी पेस्ट (कॉनटेनेटेट) मान .NET फ्रेमवर्क के बिना चल रहा नेट आधारित अनुप्रयोग जावा: क्या मतलब है? AngularJS में ScrollTo फ़ंक्शन अन्य डोमेन पर रीडायरेक्ट करें लेकिन टाइप किए गए डोमेन रखें HTTP प्राप्त अनुरोध स्ट्रिंग्स का सही एन्कोडिंग क्या है? psycopg2 स्थापना त्रुटि – लाइब्रेरी लोड नहीं है: libssl.dylib उद्देश्य-सी कोड में ब्लूफ़िश से डिक्रिप्ट वैल्यू मुझे अपने यूआरएल में पिछली स्लैश का उपयोग कब करना चाहिए? फुलस्क्रीन एपीआई: कौन सी घटनाएं निकाल दी जाती हैं? क्या हार्डवेयर की प्रेस के लिए सुनवाई करने वाली एक एंड्रॉइड सेवा बनाना संभव है?

ASP.NET Eval () को समझना और बाइंड ()

क्या कोई मुझे कुछ न्यूनतम एएसपी.नेट कोड को Eval() और Bind() को समझने के लिए दिखा सकता है?

यह सबसे अच्छा है अगर आप मुझे दो अलग-अलग कोड-स्निपेट प्रदान करते हैं या वेब-लिंक हो सकते हैं

Solutions Collecting From Web of "ASP.NET Eval () को समझना और बाइंड ()"

केवल पढ़ने के लिए नियंत्रण वे समान हैं। दो तरह से डेटाबेस के लिए, डेटा स्रोत का उपयोग करके जिसमें आप अपडेट करना चाहते हैं, सम्मिलित करें, आदि घोषितिक डेटाबेस के साथ, आपको Bind का उपयोग करने की आवश्यकता होगी।

उदाहरण के लिए एक ItemTemplate साथ एक GridView कल्पना EditItemTemplate और EditItemTemplate यदि आप ItemTemplate Eval में Bind या Eval उपयोग करते हैं, तो कोई अंतर नहीं होगा। यदि आप EditItemTemplate में Eval का उपयोग करते हैं, मान EditItemTemplate की Update विधि को पारित करने में सक्षम नहीं होगा जो ग्रिड के लिए बाध्य है।


अद्यतन: मैं इस उदाहरण के साथ आया हूँ:

 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Data binding demo</title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="grdTest" runat="server" AutoGenerateEditButton="true" AutoGenerateColumns="false" DataSourceID="mySource"> <Columns> <asp:TemplateField> <ItemTemplate> <%# Eval("Name") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="edtName" runat="server" Text='<%# Bind("Name") %>' /> </EditItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </form> <asp:ObjectDataSource ID="mySource" runat="server" SelectMethod="Select" UpdateMethod="Update" TypeName="MyCompany.CustomDataSource" /> </body> </html> 

और यहां एक कस्टम वर्ग की परिभाषा है जो ऑब्जेक्ट डेटा स्रोत के रूप में कार्य करती है:

 public class CustomDataSource { public class Model { public string Name { get; set; } } public IEnumerable<Model> Select() { return new[] { new Model { Name = "some value" } }; } public void Update(string Name) { // This method will be called if you used Bind for the TextBox // and you will be able to get the new name and update the // data source accordingly } public void Update() { // This method will be called if you used Eval for the TextBox // and you will not be able to get the new name that the user // entered } } 

दरीन डिमिट्रोव द्वारा पूरी तरह से इसका जवाब दिया गया था, लेकिन एएसपी.नेट 4.5 के बाद से, अब इन बाइंडिंग को * Eval() और Bind() को बदलने के लिए एक बेहतर तरीका है, दृढ़तापूर्वक टाइप किए गए बाइंडिंग का फायदा उठाते हुए

* नोट: यह केवल तभी काम करेगा जब आप SqlDataSource या एक anonymous object का उपयोग नहीं कर रहे हैं। इसके लिए एक मजबूत-टाइप ऑब्जेक्ट ( ईएफ मॉडल या किसी अन्य श्रेणी से) की आवश्यकता होती है।

यह कोड स्निपेट दिखाता है कि Eval और Bind का उपयोग एक ListView कंट्रोल के लिए किया जाएगा ( InsertItem को Bind आवश्यकता है, जैसा कि ऊपर Darin Dimitrov द्वारा समझाया गया है, और ItemTemplate केवल पढ़ने के लिए है (इसलिए वे लेबल हैं), इसलिए केवल Eval आवश्यकता है):

 <asp:ListView ID="ListView1" runat="server" DataKeyNames="Id" InsertItemPosition="LastItem" SelectMethod="ListView1_GetData" InsertMethod="ListView1_InsertItem" DeleteMethod="ListView1_DeleteItem"> <InsertItemTemplate> <li> Title: <asp:TextBox ID="Title" runat="server" Text='<%# Bind("Title") %>'/><br /> Description: <asp:TextBox ID="Description" runat="server" TextMode="MultiLine" Text='<%# Bind("Description") %>' /><br /> <asp:Button ID="InsertButton" runat="server" Text="Insert" CommandName="Insert" /> </li> </InsertItemTemplate> <ItemTemplate> <li> Title: <asp:Label ID="Title" runat="server" Text='<%# Eval("Title") %>' /><br /> Description: <asp:Label ID="Description" runat="server" Text='<%# Eval("Description") %>' /><br /> <asp:Button ID="DeleteButton" runat="server" Text="Delete" CommandName="Delete" CausesValidation="false"/> </li> </ItemTemplate> 

एएसपी.नेट 4.5 से , डेटा-बाउंड कंट्रोल्स को नई प्रॉपर्टी ItemType प्रकार के साथ बढ़ाया गया है, जो उस वस्तु के प्रकार को इंगित करता है जिसे आप अपने डेटा स्रोत के लिए निर्दिष्ट कर रहे हैं।

 <asp:ListView ItemType="Picture" ID="ListView1" runat="server" ...> 

Picture दृढ़ता प्रकार वाली वस्तु है (ईएफ मॉडल से) हम फिर प्रतिस्थापित करते हैं:

 Bind(property) -> BindItem.property Eval(property) -> Item.property 

तो यह:

 <%# Bind("Title") %> <%# Bind("Description") %> <%# Eval("Title") %> <%# Eval("Description") %> 

यह हो जाएगा:

 <%# BindItem.Title %> <%# BindItem.Description %> <%# Item.Title %> <%# Item.Description %> 

Eval और Bind पर लाभ :

  • IntelliSense आपके ऑब्जेक्ट के साथ काम कर रहे वस्तु की सही संपत्ति मिल सकती है यहां छवि विवरण दर्ज करें
  • यदि संपत्ति का नाम बदलकर / हटा दिया गया है, तो ब्राउज़र में पेज देखने से पहले आपको एक त्रुटि मिल जाएगी
  • बाह्य उपकरण (वीएस के पूर्ण संस्करणों की आवश्यकता होती है) आपके ऑब्जेक्ट पर किसी प्रॉपर्टी का नाम बदलते समय मार्कअप में आइटम का सही नाम बदल देगा

स्रोत : इस उत्कृष्ट पुस्तक से

 grdexcel.Visible = true; Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Registration.xls")); Response.ContentType = "application/ms-excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grdexcel.AllowPaging = false; Fill_Grid(); HtmlForm htmf = new HtmlForm(); htmf.Attributes.Add("runat", "server"); htmf.Controls.Add(grdexcel); grdexcel.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); grdexcel.Visible = false; 

tihor