2011-06-30 5 views
16

मैं नीचे दिखाए गए पॉप अप को आग लगाने की कोशिश कर रहा हूं, लेकिन यह काम नहीं कर रहा है। कृपया मददपेज का उपयोग करना। क्लाइंटस्क्रिप्ट। रजिस्ट्रार क्लाइंटस्क्रिप्टबॉक काम नहीं कर रहा

public void btnSubmit_Click(Object o, EventArgs e) 
{ 
    if (checkFileExists(Convert.ToString(fileInfo))) 
    { 
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Msg", "<script type=\"text/javascript\" language=\"javascript\">function showMsg(){return confirm(\"This image name already exists, do you want to replace it?\");}</script>", true); 
     btnSubmit.OnClientClick = "return showMsg()"; 
    } 
    if (something else) 
    { 
     // It does whatever is here but never pops the question above 
    } 
} 

और बटन पर मैं

<asp:Button class="Button" ID="btnSubmit" CausesValidation="True" Text="SUBMIT" runat="server" 
      OnClick="btnSubmit_Click"></asp:Button> 
+0

मेरे मामले में फ़ंक्शन हस्ताक्षर से '(तर्क, संदर्भ) '। उम्मीद है कि यह किसी की मदद करता है। –

उत्तर

17

पिछले पैरामीटर आप RegisterClientScriptBlock भेज रहे true है, जो विधि बताता है एक <script> ब्लॉक में अपनी स्क्रिप्ट रैप करने के लिए है, लेकिन आप ' पहले से ही कर रहे हैं। यह शायद काम नहीं कर रहा है, क्योंकि यह अमान्य (यानी नेस्टेड) ​​स्क्रिप्ट टैग प्रस्तुत कर रहा है।

+0

मैंने इसे गलत में बदल दिया, लेकिन यह अभी भी इसे अनदेखा कर रहा है, यह पॉप अप नहीं करता है। मैंने इसे चलाने के लिए मजबूर करने के लिए भी स्थिति को बाहर निकाला लेकिन कुछ भी नहीं, यह सिर्फ "सबमिट" और खत्म हो गया है .. कभी भी btnSubmit.OnClientClick = "वापसी ShoeMsg()" को कभी नहीं चलाता है; – user710502

+0

जब आप अपने पृष्ठ के स्रोत को देखते हैं, तो क्या आपको '

5

UPDATED प्रतिक्रिया (ओ पी की टिप्पणी के जवाब में)

पूरे प्रतिमान ASP.NET में लागू करने के लिए एक छोटे से परेशान हो सकता है "क्या आप सुनिश्चित हैं"। यहां एक दृष्टिकोण है जिसका मैंने इसे संबोधित करने के लिए उपयोग किया है। मुझे यकीन है कि इसे पूरा करने के कई अन्य तरीके हैं, जिनमें से कुछ अधिक सुरुचिपूर्ण हैं। लेकिन वैसे भी ...

  • एक एएसपी रखें: "उपयोगकर्ता सुनिश्चित है" को इंगित करने के लिए अपने रूप में छुपा क्षेत्र रखें। इसके डिफ़ॉल्ट मान को गलत पर सेट करें।
  • अपने showMsg() जावास्क्रिप्ट फ़ंक्शन को एएसएक्सएक्स फ़ाइल में सीधे परिभाषित करें। यह हमेशा पृष्ठ पर हो सकता है, आग के लिए तैयार; आप रजिस्टर क्लाइंटस्क्रिप्ट के माध्यम से इसे सशर्त रूप से जोड़ने की आवश्यकता नहीं है या नहीं चाहते हैं। यदि उपयोगकर्ता "हाँ मुझे यकीन है" की पुष्टि करता है तो आपको 2 फ़ंक्शन करने के लिए उस फ़ंक्शन को बढ़ाने की भी आवश्यकता होगी: ए) अपना एएसपी सेट करें: छुपे हुए फ़ील्ड का मान सही है; बी) फॉर्म जमा करें।
  • एएसपी की जांच के लिए अपने btnSubmit_Click() फ़ंक्शन को कार्यान्वित करें: छुपा मान: यदि वह मान सत्य है, तो आप जानते हैं कि उपयोगकर्ता ने पहले ही "निश्चित हैं" संवाद की पुष्टि की है, ताकि आप अपना ऑपरेशन कर सकें (और छुपा मूल्य वापस इसे "रीसेट" करने के लिए झूठा करने के लिए)। यदि एएसपी: छुपा मूल्य गलत है, तो अपने showMsg() फ़ंक्शन पर कॉल करने के लिए अपने रजिस्टर क्लाइंटस्क्रिप्ट को ट्रिगर करें (परिभाषित नहीं करें, लेकिन वास्तव में कॉल करें)।
  • छिपा मूल्य की जाँच करने के Page_LoadComplete लागू: अगर यह सच है, प्रोग्राम के रूप में किए गए परिवर्तनों के साथ ऊपर btnSubmitClick()

कहते हैं, अपने पृष्ठ कुछ इस तरह व्यवहार करना चाहिए:

  1. उपयोगकर्ता क्लिक करें, पेज पोस्ट वापस।
  2. btnSubmit_Click निष्पादित किया गया है, छुपा हुआ फ़ील्ड गलत है, और showMsg() को कॉल करने के लिए RegisterClientScript सेट करता है।
  3. पेज_लोड पूर्ण दृश्य छुपा हुआ फ़ील्ड झूठा है, इसलिए यह कुछ भी नहीं करता है। पोस्टबैक पूर्ण हो जाता है और पृष्ठ ब्राउज़र पर वापस भेज दिया जाता है।
  4. ब्राउज़र पार्स पेज, showMsg() पर आता है और इसे चलाता है। यह आपके द्वारा सुनिश्चित किए गए संवाद को पॉप अप करता है।
  5. उपयोगकर्ता-आप-निश्चित संवाद पर "हां" क्लिक करते हैं। आपका अपडेट किया गया showMsg फ़ंक्शन इसका पता लगाता है, छिपे हुए फ़ील्ड को सत्य पर सेट करता है और फ़ॉर्म सबमिट करता है। पेज पोस्ट-बैक।
  6. क्योंकि फ़ॉर्म पोस्ट किया गया था लेकिन सबमिट बटन वास्तव में क्लिक नहीं किया गया था, तो आपका btnSubmit_Click फ़ंक्शन यहां नहीं कहा जाता है।
  7. पेज_लोड पूर्ण रूप से छुपा हुआ क्षेत्र देखता है, इसलिए यह btnSubmit_Click फ़ंक्शन को कॉल करता है।
  8. btnSubmit_Click छुपा हुआ फ़ील्ड सत्य है, और असली ऑपरेशन करता है।

उपरोक्त दृष्टिकोण निश्चित रूप से भारी हाथ है। यदि आप अपने निर्णय लेने के लिए AJAX का उपयोग करना चाहते हैं कि "क्या आप निश्चित हैं" आवश्यक है, तो आप क्लाइंट पक्ष में इस तर्क के बहुत अधिक स्थानांतरित कर सकते हैं और स्वयं को एक पोस्टबैक ऑपरेशन सहेज सकते हैं।

हालांकि, भारी हाथ या नहीं, उपर्युक्त दृष्टिकोण काम करेगा, और परिणामस्वरूप अपेक्षाकृत आसान बनाए रखने के लिए कोड होगा, जब तक आप कुछ अच्छी टिप्पणियां करते हैं।

मूल प्रतिक्रिया:

  1. बटन नहीं OnClientClick मूल्य के साथ प्रदान की गई है:

    के रूप में वर्तमान में लिखा है, showMsg() दूसरी बार उपयोगकर्ता सबमिट बटन पर क्लिक करता है जब तक कहा जाता है नहीं किया जाएगा।

  2. उपयोगकर्ता सबमिट बटन पर क्लिक करता है; पेज पोस्ट-बैक।
  3. इवेंट हैंडलर पृष्ठ पर "function showMsg()" की परिभाषा डालता है (रजिस्टर क्लाइंटस्क्रिप्ट); यह बटन पर एक OnClientClick विशेषता भी जोड़ता है। पोस्टबैक पूर्ण हो जाता है और ब्राउज़र ब्राउज़र पर फिर से खींचा जाता है।
  4. इस बिंदु पर, showMsg() किसी के द्वारा नहीं बुलाया गया है।
  5. उपयोगकर्ता सबमिट बटन पर क्लिक करता है।
  6. बटन अब पर ऑन क्लाइंटक्लिक मान है, इस बार इसे showMsg कॉल करना चाहिए।

अन्य बातों पर विचार करने के लिए:

आप अपने RegisterClientScript में वास्तविक जावास्क्रिप्ट समारोह परिभाषा नहीं है। इसे पृष्ठ पर क्यों नहीं परिभाषित करें (.aspx फ़ाइल में)? यह हमेशा वहां होने के लिए कुछ भी चोट नहीं पहुंचाएगा। इसे तब तक नहीं निकाल दिया जाता जब तक इसे वास्तव में बुलाया नहीं जाता है।

मैं आपके द्वारा उपयोग किए जा रहे दोगुनी-अभिभावक नोटेशन से परिचित नहीं हूं: "GetType()()" - यदि यह संकलक त्रुटि उत्पन्न नहीं कर रहा है या फेंक नहीं रहा है, तो यह अप्रासंगिक हो सकता है।

निश्चित रूप से फ़ायरबग और/या फिडलर से परिचित हो जाएं, ताकि आप देख सकें कि ब्राउज़र में एचटीएमएल को वास्तव में क्या भेजा जा रहा है। यह आपके वेब-विकास डिबगिंग को बहुत आसान बना देगा।

+0

गेटटाइप()() एक टाइपो है जब मैंने यहां पोस्ट किया था। मेरे पास .aspx में ऑनक्लिएंटक्लिक के साथ था, लेकिन यह मुझे एक जेस्क्रिप्ट ऑब्जेक्ट अपेक्षित त्रुटि देगा, और मैंने कल्पना की क्योंकि यह विधि नहीं मिल सका .. ऐसा लगता है जैसे यह पहले जावास्क्रिप्ट के लिए जाता है और फिर सी # कोड .. समस्या यह है कि मुझे यह तय करने के लिए पहले कुछ चीजों का मूल्यांकन करना होगा कि जावास्क्रिप्ट को आग लगाना है या नहीं ... मुझे नहीं पता कि क्या करना है :( – user710502

+0

आपको कुछ और विवरण देने और एक संभावित दृष्टिकोण देने के लिए मेरा उत्तर संपादित किया पूरी बात यह है कि मैं इसे सबसे अच्छा दृष्टिकोण नहीं कह रहा हूं, लेकिन अब तक आप जो कुछ भी कर रहे हैं उससे कुछ ही छोटे कदम दूर हैं। – mikemanne

1

मैं आपकी समस्या को समझता हूं और मेरा सुझाव है कि आप निम्न कार्य करें।

1- आपके btSubmit अगर (कुछ) रखते हैं लेकिन अपने

public void btnSubmit_Click(Object o, EventArgs e) 
{ 
    if (checkFileExists(Convert.ToString(fileInfo))) 
    { 
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Msg", "<script type=\"text/javascript\" language=\"javascript\">function showMsg(){return confirm(\"This image name already exists, do you want to replace it?\");}</script>", true); 
     btnSubmit.OnClientClick = "return showMsg()"; 
    }  
} 

में हटा दें।

2- जावास्क्रिप्ट पुष्टिकरण के समान संवाद बनाने के लिए Dialog का उपयोग करें, लेकिन अपने स्वयं के क्लिक ईवेंट के साथ एएसपीनेट बटन के साथ।

3 परिवर्तन आपके

return confirm(\"This image name already exists, do you want to replace it?\"); 
jQuery के संवाद के तर्क के साथ अपनी पहली घटना की RegisterClientScriptBlock में

if (something else) 
{ 
    // you´ll know the user click your confirm button already!!! 
} 

मुझे आशा है कि इस मदद करता है:

4- अपने नए बटन के नए ऐसी स्थिति में आपकी अतिरिक्त तर्क जोड़ें।

+0

jQuery संवाद के साथ याद रखने की एक बात: जब आप संवाद आरंभ करते हैं, तो jQuery renders डीओएम के अंत में नए टैग। यह

टैग के बाहर है। इसका मतलब है कि, किसी भी एएसपी: संवाद में निहित फ़ील्ड (या समान) तत्वों को उनके मूल्य दृश्यमान में वापस नहीं दिखाएंगे। यह शायद ' टी एम एक सबमिट बटन के लिए एटर, लेकिन मैंने यह पता लगाने की कोशिश कर एक दिन में कई घंटे खो दिए कि मेरे एएसपी में टेक्स्ट क्यों है: मेरे संवाद पर फ़ील्ड पोस्टबैक पर कभी भी नहीं था! :) – mikemanne

+0

इस उत्तर को ऊपर उठाया क्योंकि मुझे 2-अलग-अलग बटन पसंद हैं जो छिपे हुए क्षेत्र-दृष्टिकोण से बेहतर है, मैंने अपने उत्तर में उल्लिखित किया है! – mikemanne

+0

यह एसओ चर्चा यह सुनिश्चित करने के लिए एक शानदार तरीका दिखाती है कि jQueryUI तत्व (कम से कम संवाद) FORM टैग के भीतर प्रस्तुत किए जाते हैं, इसलिए सबमिट करें बटन और व्यूस्टेट-सक्षम डेटा मान सही तरीके से काम करते हैं: http: // stackoverflow।कॉम/प्रश्न/757232/jquery-ui-dialog-with-asp-net-button-postback – mikemanne

0

फिशबास्केट गॉर्डो अंतर को इंगित करने के लिए धन्यवाद! एक बहुत मदद थी!

पेज. क्लाइंटस्क्रिप्ट। रजिस्ट्रार क्लाइंटस्क्रिप्टब्लॉक तब तक नहीं चला जब तक मैंने आपके द्वारा इंगित परिवर्तन नहीं किया यानी टैग को हटा दिया और चौथे पैरामीटर के रूप में 'सत्य' जोड़ा। यह जांचना एक अच्छा विचार हो सकता है कि कोई अन्य स्क्रिप्ट ब्लॉक उस व्यक्ति द्वारा प्रभावित परिवर्तनों को उलट देता है जो फायरिंग नहीं कर रहा है और यह भी कि स्क्रिप्ट ब्लॉक का अनूठा नाम है।

29

पेज.ClientScript.RegisterClientScriptBlock के लिए एक और कारण यह नहीं है कि पृष्ठ में सर्वर साइड फॉर्म नहीं है। <form id="form1" runat="server">... </form>

+1

फॉर्म टैग जोड़कर मेरी समस्या हल हो जाती है। –

-1

मैं आज सुबह एक ही समस्या थी और यह केवल इस तरह से काम किया:

Response.Write("<script type='text/javascript'>alert('" + AlerteMsg + "');</script>"); 

आपके मामले में आप लिख सकते हैं जो कुछ भी जावास्क्रिप्ट आप चाहता है!

-1

मैं आज सुबह एक ही समस्या थी और यह केवल इस तरह से काम किया है: ("(चेतावनी '' + AlerteMsg + '');")

Response.Write;

अपने मामले में आप जो भी जावास्क्रिप्ट चाहते हैं उसे लिख सकते हैं!

कोड ऊपर से

.. अब मैं 2 बार वापस प्रेस करने button..then यह काम नहीं कर रहा था क्योंकि मेरी स्क्रिप्ट में समारोह प्रोटोटाइप गलत लापता था की जरूरत है यह वापस चला जाता है .. किसी भी समाधान

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