2010-10-05 12 views

उत्तर

33

तो मुझे पता है कि हर किसी ने मूल क्लाइंट साइड दृष्टिकोण दिखाया है, और यह ठीक है, लेकिन मैं सर्वर पर एक विशिष्ट क्लाइंट साइड इवेंट को संभालने के लिए कम से कम एक समाधान दिखाना चाहता था।

आइए कोड को देखें, और टुकड़े से टुकड़े पर जाएं।

चूंकि एएसपी.Net टेक्स्टबॉक्स ऑनब्लूर के लिए सर्वर साइड इवेंट का पर्दाफाश नहीं करता है, तो आपको इसे मैन्युअल रूप से करना होगा। सौभाग्य से यह हासिल करने के लिए बहुत आसान है। मान लें कि आपके पास अपने .aspx पृष्ठ में कोड का यह छोटा सा कोड है। जब भी टेक्स्टबॉक्स फोकस खो देता है तो आप लेबल नियंत्रण सर्वर पक्ष को अपडेट करना चाहते हैं।

<asp:Label ID="lblOnBlur" runat="server">On Blur Example</asp:Label><br /> 
<asp:TextBox ID="tbOnBlur" runat="server" ClientIDMode="Static" /><br /> 
<asp:Label ID="lblOutput" runat="server" /> 

ASP.Net एक client side function में बनाया गया है Postbacks को गति प्रदान करने के लिए कहा जाता है कि कि दो पैरामीटर लेता है:

  1. लक्ष्य (घटना के कारण नियंत्रण से ID)
  2. तर्क (वैकल्पिक जानकारी आप

आप सकता है बस मार्कअप में घटना wireup द्वारा सर्वर से पारित करने के लिए) चाहते हैं अपने पाठ बॉक्स के लिए निम्न विशेषता और मूल्य जोड़ने:

onblur="__doPostBack('tbOnBlur','OnBlur');" 

हालांकि, ढांचा एक आसान तरीका आप सर्वर साइड के लिए इस स्क्रिप्ट उत्पन्न करने के लिए है। अपने Page_Init विधि में, बस GetPostBackEventReference के लिए एक कॉल जोड़ सकते हैं और "onBlur" विशेषता के लिए असाइन करें तुम इतनी तरह नियंत्रित करने के लिए:

protected void Page_Init(object sender, EventArgs e) 
{ 
    var onBlurScript = Page.ClientScript.GetPostBackEventReference(tbOnBlur, "OnBlur"); 
    tbOnBlur.Attributes.Add("onblur", onBlurScript); 
} 
मानक सर्वर नियंत्रण की घटनाओं के साथ

, घटना wireup और मंगलाचरण द्वारा आप के लिए पूर्ण रूप से अपने नियंत्रित किया जाता है IPostBackEventHandler लागू करना। यह एक-ऑफ समाधान के लिए बहुत काम है, इसलिए अनुरोध पैराम का निरीक्षण करके इसे मैन्युअल रूप से संभालें।

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     var ctrlName = Request.Params[Page.postEventSourceID]; 
     var args = Request.Params[Page.postEventArgumentID]; 

     HandleCustomPostbackEvent(ctrlName, args); 
    } 
} 

private void HandleCustomPostbackEvent(string ctrlName, string args) 
{ 
    //Since this will get called for every postback, we only 
    // want to handle a specific combination of control 
    // and argument. 
    if (ctrlName == tbOnBlur.UniqueID && args == "OnBlur") 
    { 
     lblOutput.Text = "On Blur Event Handled Server Side!" + DateTime.Now; 
    } 
} 
अंत यह सर्वर साइड घटनाओं अनुकरण करने के लिए यदि आप एक छोटे से ढांचे की खुदाई कोई आपत्ति नहीं है बहुत मुश्किल नहीं है में

आशा है कि इससे मदद मिलती है!

चीयर्स,
जोश

+0

+1 जोश। वह वास्तव में बहुत जानकारीपूर्ण था। –

+0

आपके सुंदर उत्तर Genii के लिए बहुत बहुत धन्यवाद। आपकी पोस्ट मेरे लिए बहुत जानकारीपूर्ण है। –

+0

मैंने इसे पूरा करने के लिए कई अन्य सुझाव देखे हैं, और आपका उत्तर अब तक का सबसे अच्छा है। धन्यवाद! – Aaron

4
if (!Page.IsPostBack) 
    { 
     txtName.Attributes.Add("onblur","alert('Hello world')"); 
    } 
14

आप पाठ बॉक्स के बाद कुछ करने के लिए सर्वर ध्यान केंद्रित आप, AutoPostback = "सही" और जोड़ सकते हैं यदि आप नहीं करते पोस्टबैक, पूरे पृष्ठ को फिर से लोड एक UpdatePanel का उपयोग करना चाहते खो देता है चाहते हैं:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" 
          OnTextChanged="TextBox1_TextChanged" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

फ़ंक्शन टेक्स्टबॉक्स 1_TextChanged टेक्स्ट (सर्वरसाइड) के साथ कुछ कर सकता है।

+0

- कैसे UpdatePanel पूरे पृष्ठ – Kamal

+0

@Kamal के पुनः लोड रोक करता है ... ऐसा नहीं है।एक अद्यतन पैनल पूरे पृष्ठ को सर्वर पर लोड होने से रोकने के लिए कुछ भी नहीं करता है। अनिवार्य रूप से क्या होता है कि एक पोस्टबैक क्लाइंट-साइड को XmlHttpRequest का उपयोग करके किया जाता है और फिर सभी अपडेटपेनल की सामग्री को फेंक दिया जाता है और लौटा दिया जाता है। यह सामान्य पोस्टबैक के "झिलमिलाहट" को कम करता है, लेकिन सर्वर पर कोई समय प्रसंस्करण बचाता है। – Josh

+4

यह पूरे पृष्ठ को पुनः लोड करता है लेकिन प्रतिक्रिया में सामग्री को अद्यतन करने के लिए केवल अपडेट पैनेल और कुछ जावास्क्रिप्ट का HTML भेजता है। प्रतिक्रिया पूरे पृष्ठ को डाउनलोड करने से बहुत छोटी हो सकती है और ब्राउज़र को पृष्ठ को फिर से प्रस्तुत करने की आवश्यकता नहीं होती है। यह प्रक्रिया को थोड़ा तेज कर सकता है, उपयोगकर्ता को कोई फ्लिकरिंग नहीं दिखाई देगी और अनुभव बहुत आसान है। – Willem

0

आपको लगता है कि क्यों प्रयोग नहीं करते। Lostfocus के साथ एक ही काम करता है:

OnTextChanged="TextBox_TextChanged" 
ब्याज में से
संबंधित मुद्दे