2010-06-29 11 views
5

मैं कुछ कोड लिख रहा हूं जो एक ही वेब अनुरोध को निष्पादित करके एक पृष्ठ पर पोस्टबैक करने के प्रभाव की नकल करता है जो पेज पोस्टबैक को ट्रिगर करने वाले बटन पर क्लिक करने के लिए जेनरेट किया जाएगा।एएसपीनेट पेज कैसे जानता है कि कौन सा बटन पोस्टबैक ट्रिगर करता है?

समस्या यह है कि वेब अनुरोध से प्रतिक्रिया बटन पर क्लिक करते समय मुझे प्राप्त होने वाली चीज़ों के समान नहीं है।

जांच पर, मुझे लगता है कि जब भी मैं वेब अनुरोध निष्पादित करता हूं तो पेज_लोड ईवेंट ट्रिगर और संभाला जाता है, बटन क्लिक के लिए हैंडलर निष्पादित नहीं किया जा रहा है (जिसका अर्थ है कि या तो ईवेंट ट्रिगर नहीं किया गया है, या यह ट्रिगर किया जा रहा है लेकिन संभाला नहीं - मुझे लगता है कि यह पूर्व मामले की संभावना है)।

तो मेरा सवाल है - एएसपी.नेट को पता है कि बटन किस बटन पर क्लिक किया गया है ताकि वह उपयुक्त हैंडलर का आह्वान कर सके?

मैंने सोचा कि यह __EVENTTARGET param का उपयोग करके किया गया था - मैंने इसे वेब अनुरोध के पोस्ट बॉडी में सही ढंग से सेट किया है, लेकिन इससे कोई फर्क नहीं पड़ता।

मैंने डीकोडेड __VIEWSTATE तर्क को देखा, लेकिन मैं वहां कुछ भी स्पष्ट नहीं देख सका।

क्या कोई और सहायता प्रदान कर सकता है?

संपादित करें: बस स्पष्ट होना, मैं नहीं एक वेब अनुप्रयोग के लिए क्लिक करें हैंडलर जोड़ने के लिए कैसे पूछ रहा हूँ।

बल्कि, मुझे लगता है कि पहले से ही किसी बटन को क्लिक ईवेंट हैंडलर है एक आवेदन से देख रहा हूँ, और मुझे पता है कि कैसे asp.net आंकड़े बाहर एक इनकमिंग वेब अनुरोध क्या बटन क्लिक ईवेंट हैंडलर कोड से आह्वान करने के लिए चाहते हैं।

+0

क्या आप वेबरेक्वेस्ट बनाने के बारे में अधिक जानकारी दे सकते हैं? सी # कोड या jquery या जावास्क्रिप्ट का उपयोग कर? क्या आप वेब अनुरोध के साथ _Viewstate के साथ गुजर रहे हैं? आप क्या त्रुटि देख रहे हैं? –

+0

मैं सी # का उपयोग कर रहा हूँ। मैं जो कर रहा हूं वह यह है कि मैं एक पृष्ठ के लिए प्रारंभिक अनुरोध कर रहा हूं, और प्रतिक्रिया में __VIEWSTATE तत्व वापस प्राप्त कर रहा हूं। फिर वेब अनुरोध में जो मैं पोस्टबैक की नकल करने के लिए उत्पन्न करता हूं, मैं इस __VIEWSTATE के मान को पास करता हूं। मुझे कोई त्रुटि नहीं दिखाई दे रही है - मुझे लगता है कि जब मैं सर्वर कोड पर ब्रेकपॉइंट डालता हूं तो यह है कि बटन को संभालने के लिए कोड को सर्वर पर क्लिक नहीं किया जा रहा है। –

उत्तर

0

ठीक है, तो मैं अंत में यह पता लगा।

अनुरोध में नाम मूल्य जोड़ी होनी चाहिए, जहां नाम क्लिक किए गए बटन की आईडी है, और मान '1' हो सकता है।

मुझे क्या परेशान है कि बटन पर क्लिक करके उत्पन्न अनुरोध में, मुझे ऐसा नाम मूल्य जोड़ी नहीं दिखाई दे रही थी। वास्तव में बहुत अजीब।

फिर भी, इस नाम मूल्य जोड़ी को मेरे बनाए गए वेब अनुरोध में जोड़कर बटन क्लिक इवेंट हैंडलर कोड को निकाल दिया गया।

0

अपने कोड में पीछे है, तो आप कार्रवाई करने के लिए एक घटना है करने के लिए है, और कहा कि घटना Handles ButtonName.Click

आईई होना आवश्यक है:

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click 
    ''# Process everything you want to process when Button2 gets clicked 
End Sub 

वैकल्पिक रूप से, अपने बटन में आप में OnClick सेट हो सकता है मार्कअप।

<asp:button ID="Button2" runat="server" OnClick="Button2_Click" Text="Click Me" /> 

बटन runat="server" करने के लिए सेट किया गया है, .नेट आप के लिए सभी बड़े कार्य करेंगे।

+0

हाय रॉकिंटशेक्सस्ट्रिंग, जैसा कि मैंने उपरोक्त सिलोन बिल्ली से कहा था, मैं क्लिक इवेंट को संभालना नहीं चाहता हूं - मैं सिर्फ यह जानना चाहता हूं कि मौजूदा क्लिक ईवेंट फायरिंग क्यों नहीं कर रहा है जब मैं अनुरोध के समान वेब अनुरोध का आह्वान करता हूं एक बटन क्लिक पर आह्वान किया जाता है। यदि मुझे पता था कि क्लिक हैंडलर कोड का आह्वान करने के लिए वेब अनुरोध में वास्तव में एएसपीनेट क्या देख रहा था, तो मैं इसे वेब अनुरोध में जोड़ूंगा - इसलिए मेरा मूल सवाल यह है कि asp.net वेब अनुरोध को कैसे पार करता है यह पता लगाने के लिए भेजा गया कि कौन सा हैंडलर आक्रमण करेगा। –

0

बटन के लिए इवेंट हैंडलर बनाने के कई आसान तरीके हैं। लेआउट मोड में, बटन पर डबल-क्लिक करें। या, लेआउट मोड में भी, बटन का चयन करें, गुण विंडो खोलें, "बिजली बोल्ट" आइकन पर क्लिक करें, और नियंत्रणों को ट्रिगर करने वाली घटनाओं की एक सूची देखें। जिस ईवेंट को आप चाहते हैं उस पर डबल-क्लिक करें।

जब आप इन चीजों में से एक करते हैं, विजुअल स्टूडियो, आपके कोड-बैक में इवेंट हैंडलर बनाएगा, और ईवेंट को तार देगा।

बटन इवेंट हैंडलर पृष्ठ लोड के बाद चलता है, और पृष्ठ सत्यापन के बाद यदि आप ASP.NET सत्यापनकर्ताओं का उपयोग कर रहे हैं।

+0

हाय साइलॉन बिल्ली, मैं ** ** बटन के लिए एक ईवेंट हैंडलर बनाना नहीं चाहता हूं। इसके बजाय, मैं एक वेब अनुप्रयोग में सर्वर कोड का प्रयोग करना चाहता हूं जिसे बटन क्लिक को संभालना है। मैं ऐसा एक वेब अनुरोध का आह्वान करके ऐसा करना चाहता हूं जो कि वेब अनुरोध के समान होता है जो बटन क्लिक होने पर उत्पन्न होता है। मेरा मानना ​​है कि ऐसा करने से बटन को हैंडलर कोड पर क्लिक करने का कारण बनना चाहिए, लेकिन ऐसा नहीं हो रहा है। तो मैं जानना चाहता हूं कि एएसपीनेट वेब अनुरोध में क्या देखता है ताकि यह पता चल सके कि कौन सा इवेंट हैंडलर कोड लागू किया जाना चाहिए। –

+0

वेब अनुरोधों को बटन क्लिक से बहुत अलग तरीके से संभाला जाता है, इसलिए यदि आप इसे वेब अनुरोध के रूप में देखना चाहते हैं, तो आप दो तरीकों से जा सकते हैं। एक पेज विधि का उपयोग कर है, और दूसरा एक वेब सेवा बनाकर है। मैंने पृष्ठ विधियों का उपयोग किया है, लेकिन वे एक पृष्ठ के भीतर AJAX- कॉल करने योग्य विधियां हैं, और आपको एक एएसपी की आवश्यकता होगी: स्क्रिप्ट मैनेजर टैग यह निर्दिष्ट करता है कि आप पेज विधियों का उपयोग करने जा रहे हैं। यदि आप कोई वेब सेवा बनाते हैं, तो सेवा कोड ASP.NET में सत्र में चलाएगा, और सत्र चर तक पहुंच होगी। आप एएसपी में एक सेवा संदर्भ कोड कर सकते हैं: ScriptManager; जो जावास्क्रिप्ट –

1

मैं आपके प्रश्न का उत्तर नहीं दे सकता, लेकिन मैं आपको बता सकता हूं कि कैसे पता लगाना है।

अपने पेज_लोड में एक पंक्ति जोड़ें: Request.SaveAs (@ "c: \ temp \ request.txt", true); (एक उदाहरण के लिए)।

फिर पोस्टबैक को प्रभावित करने के लिए अपने बटन पर क्लिक करें।

फिर request.txt की सामग्री पढ़ें। क्या वहां कुछ उपयोगी या दिलचस्प है?

+0

धन्यवाद, Wozza से कॉल करने योग्य सेवा बनाता है। मैं इसे जाने दूंगा और आपको बता दूंगा कि मुझे क्या पता चला है। –

0

ऐसा लगता है कि वास्तव में केवल __EVENTTARGET मूल्य को उस बटन की आईडी के साथ पोस्ट करने की आवश्यकता है, जिसे आप क्लिक करना चाहते हैं। आपको सक्षम करें EventValidation = "false" या ASP.NET एक त्रुटि फेंक देगा। इस उदाहरण को देखें। सादा एचटीएमएल पेज, एएसपीनेट पेज पर पोस्ट, उस बटन पर एक बटन सिम्युलेट करना, जो आप करने की कोशिश कर रहे हैं उसके समान होना चाहिए।

HTML पृष्ठ: बटन के साथ

<html xmlns="http://www.w3.org/1999/xhtml"> 
<body> 
    <form action="Default.aspx" method="post"> 
    <input value="cmdSubmit" name="__EVENTTARGET" type="hidden" /> 
    <input type="submit" value="submit" /> 
    </form> 
</body> 
</html> 

ASP.NET पृष्ठ क्लिक करने के लिए (Default.aspx):

<%@ Page Language="C#" EnableEventValidation="false" %> 
<script runat="server"> 

    protected void cmdSubmit_Click(object sender, EventArgs e) 
    { 
     litResult.Text = "Submit button clicked"; 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<body> 
    <form id="form1" runat="server"> 
    <asp:Literal ID="litResult" runat="server" EnableViewState="false"></asp:Literal> 
    <asp:Button UseSubmitBehavior="false" ID="cmdSubmit" EnableViewState="false" runat="server" 
     OnClick="cmdSubmit_Click" Text="Submit" /> 
    </form> 
</body> 
</html> 
+0

क्रिस, मैं जावास्क्रिप्ट उत्पन्न कर सकता हूं - लेकिन यह कैसे मेरे सवाल का जवाब देगा कि एएसपीनेट कैसे जानता है कि विशेष ईवेंट हैंडलिंग कोड कैसे ट्रिगर करें? –

+1

ऐसा प्रतीत होता है कि जावास्क्रिप्ट उस नियंत्रण की आईडी के साथ __EVENTTARGET छिपे हुए फ़ील्ड का मान सेट कर रहा है, और फिर फॉर्म सबमिट कर रहा है। लेकिन इससे कहीं अधिक संभव है, जैसे कि व्यूस्टेट फ़ील्ड खाली नहीं हो सकता है यह इंगित करने के लिए कि यह एक पोस्टबैक है। –

+0

यह एक अच्छा मुद्दा है, क्रिस, और यही वह है जो मैंने खुद को सोचा था। मैंने अनुरोध पर __EVENTTARGET फ़ील्ड की जांच की जो बटन पर क्लिक करने के लिए उत्पन्न हुआ था, और उसके पास क्लिक किए गए बटन की आईडी थी। मैंने तब सुनिश्चित किया कि मेरे अनुरोध के समान __EVENTTARGET मान था, लेकिन यह बटन क्लिक ईवेंट हैंडलर को ट्रिगर करने के लिए प्रतीत नहीं होता था। तो शायद इसके लिए और भी कुछ है। मेरी इच्छा है कि कोई यहां अधिक प्रकाश डाल सके ... –

5

सबसे पहले, एक ASP.NET बटन <asp:button> फार्म पर एक <input type="submit" runat="server"...> तत्व के रूप में बना देता है। पोस्टबैक के संदर्भ में, यह बटन अन्य नियंत्रणों की तुलना में अलग-अलग व्यवहार करता है।

जब <input type="submit"...> पर क्लिक किया गया तो एएसपी.NET (इसे .htm में आज़माएं) की सहायता के बिना पर स्वचालित रूप से एक पोस्टबैक आग लग जाएगी। आप POST बॉडी के पैरामीटर देखकर कौन सा बटन क्लिक कर सकते हैं यह निर्धारित कर सकते हैं। बटन का नाम और उसका मान (टेक्स्ट प्रोप।) पैरामीटर के रूप में भेजा जाएगा। __EVENTTARGET तस्वीर में नहीं है और शून्य होना चाहिए। इसके अलावा, विनिर्देश के अनुसार पैरामीटर की सूची में केवल एक बटन नियंत्रण होगा (जिसे क्लिक किया गया था)। तो अब आप जानते हैं कि कौन सा बटन क्लिक किया गया था।

फिर __EVENTTARGET का उपयोग क्या है?

अन्य नियंत्रण, जैसे <asp:DropDownList> जो SELECT के रूप में प्रस्तुत करते हैं, क्लिक करते समय पोस्टबैक नहीं करते हैं, लेकिन बस एक बदलें बदलें जावास्क्रिप्ट ईवेंट। यदि आप SelectedIndexChanged ईवेंट के माध्यम से सर्वर की तरफ ईवेंट को संभालना चाहते हैं, तो एएसपी.नेट को आपके लिए कुछ अतिरिक्त काम करना होगा। यदि आप DropDownList, ASP के लिए AutoPostBack = True सेट करते हैं।नेट मूल पर चेंज जेएस इवेंट पर कब्जा करेगा और एक कस्टम __doPostBack जेएस फ़ंक्शन को हुकअप करेगा जो __EVENTTARGET और को स्पष्ट रूप से को फ़ॉर्म सबमिट करने के लिए ज़िम्मेदार है। अब आप नियंत्रण को निर्धारित कर सकते हैं जो __EVENTTARGET की जांच करके पोस्टबैक को ट्रिगर करता है।

उम्मीद है कि यह थोड़ा सा मदद करता है!

संबंधित मुद्दे