2011-06-19 11 views
8

मेरे पास एक ऐसा फॉर्म है जो प्रारंभ में jQuery के माध्यम से छिपा हुआ है, और एक बटन के क्लिक पर दो रेडियो बटन दिखाई देते हैं (प्रारंभ में jQuery के माध्यम से भी छुपाया जाता है)। एक रेडियो बटन के क्लिक पर, उपयोगकर्ता को दूसरे पृष्ठ पर रीडायरेक्ट किया जाता है (यह ठीक काम करता है)। JQuery के माध्यम से, अन्य रेडियो बटन "फॉर्म" के क्लिक पर फिर से दिखाई देता है।पोस्टबैक (एएसपी.नेट) पर jQuery फ़ंक्शन चलाएं

मेरी समस्या तब होती है जब 'फॉर्म' के भीतर एक फ़ील्ड सबमिट करने पर सर्वर-साइड मान्य है, और पृष्ठ को सत्यापन त्रुटि संदेश के साथ पुनः लोड किया गया है लेकिन 'फॉर्म' अब छुपा हुआ है (नीचे प्रारंभिक jQuery के अनुसार) ।

मैं पोस्टबैक पर फ़ॉर्म को कैसे दिख सकता हूं? (मैं पहले से ही एएसपी पैनलों & AJAX UpdatePanel कोई फायदा नहीं हुआ है।)

** यह मेरी jQuery है: **

// Reveal Radio Fields 
     $(".btn-leavecomment, .txt-leavecomment").toggle(function(){ 
      $("#commenttype").stop().animate({ down: "+=300" }, 3000)  
      $("#commenttype").stop().slideDown("slow");  
     }, function(){ 
      $("#commenttype").stop().animate({ down: "-=300" }, 1400)  
      $("#commenttype").stop().slideUp("slow"); 
     });  


     // Reveal Form on-click of one radio field in particular 
     $(".reveal_ccform").toggle(function(){ 
      $("#ccform_container").stop().animate({ down: "+=300" }, 4000)  
      $("#ccform_container").stop().slideDown("slow:4000");  
     }, function(){ 
      $("#ccform_container").stop().animate({ down: "-=300" }, 4000)  
      $("#ccform_container").stop().slideUp("slow:4000"); 
     }); 

अभी-अभी जोड़ा जावास्क्रिप्ट कार्यान्वयन (के रूप में Moar के सुझाव के अनुसार) यह अभी भी नहीं है काम कर रहा है, कोई विचार? :(:

जावास्क्रिप्ट:

<script type="text/javascript"> 
     $(document).ready() { 
      function isPostBack() 
      { 
       if (!document.getElementById('clientSideIsPostBack')) 
       { 
        return false; 

        if (document.getElementById('clientSideIsPostBack').value == 'Y') 
        return true; 
        } 

       // Reveal Comment Type 
       $(".btn-leavecomment, .txt-leavecomment").toggle(function() { 
        $("#commenttype").stop().animate({ down: "+=300" }, 3000) 
        $("#commenttype").stop().slideDown("slow"); 
       }, function() { 
        $("#commenttype").stop().animate({ down: "-=300" }, 1400) 
        $("#commenttype").stop().slideUp("slow"); 
       }); 


       // Reveal Sign Guestbook Form 
       $(".reveal_ccform").toggle(function() { 
        $("#ccform_container").stop().animate({ down: "+=300" }, 4000) 
        $("#ccform_container").stop().slideDown("slow:4000"); 
       }, function() { 
        $("#ccform_container").stop().animate({ down: "-=300" }, 4000) 
        $("#ccform_container").stop().slideUp("slow:4000"); 
       }); 

       // Hide 'Leave a Comment' button and 'Comment Type' div 
       $('.reveal_ccform').click(function() { 
        $(".btn-leavecomment").stop().fadeOut("slow:1500"), 
        $('#commenttype').slideUp("slow:8000"); 
       }); 
      } 
     } 
    </script> 

सी #:।

if (Page.IsPostBack) 
     { 
      Page.ClientScript.RegisterStartupScript(GetType(), "IsPostBack", script, true); 

      //Second part of code will run if is postback = true 
      ClientScriptManager cs = Page.ClientScript; 
      Type csType = this.GetType(); 
      cs.RegisterClientScriptBlock(csType, "openForms",  "$(document).ready(openForms);", true); 
     } 

उत्तर

3

मैं जावास्क्रिप्ट आप एक समारोह में पता चला है के सभी डाल सिफारिश करेंगे इस उदाहरण के लिए, की मदद से आप कहते हैं कि जगह यह

myFunction(); 

फिर, अपने कोड-पीछे में, इसे पृष्ठ में से किसी एक में रखें एनटीएस (मैं Page_Load सिफारिश करेंगे)

if (IsPostBack) 
    ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction", "$(document).ready(myFunction);", true); 

यह पृष्ठ है कि आपके समारोह चलेंगे तभी जब पेज एक पोस्ट वापस आ गया है करने के लिए जावास्क्रिप्ट इंजेक्षन जाएगा।

+0

हाय Moar को नष्ट करने के लिए JQuery का उपयोग करने के लिए होगा। मैंने पेज_लोड ईवेंट में कोड-बैक जोड़ा और जावास्क्रिप्ट को आपके जैसा फ़ंक्शन में डाल दिया, लेकिन यह अभी भी काम नहीं कर रहा है। आपके द्वारा पोस्ट किए गए कोड को देखने के बाद – Dan

+0

@Dan से ऊपर की गई नई जोड़ी गई जावास्क्रिप्ट देखें मुझे "ओपनफॉर्म" नामक एक फ़ंक्शन नहीं मिला है, क्या मुझे कुछ याद आ रही है? – MoarCodePlz

+0

हाँ क्षमा करें, मैं अलग-अलग चीजों की कोशिश कर रहा था, वापस वापस लेना चाहिए था, फ़ंक्शन ओपनफॉर्म्स IsPostBack फ़ंक्शन के लिए बस एक और नाम है, मेरे पास IsPostBack नामक बहुत सी चीजें हैं जो मुझे भ्रमित कर रही थी (मुझे लगता है कि मेरे पास एक var, Funct name था और फिर इसे एक बार चरण में सी # में बुला रहा है)। मैं क्षमाप्रार्थी हूं। मैं सिंटैक्स पर निश्चित नहीं हूं और जावास्क्रिप्ट में तत्वों को कैसे खोलूं। – Dan

1

जब कोई पोस्टबैक होता है, तो jQuery के माध्यम से पृष्ठ पर किए गए कोई भी परिवर्तन खो जाएंगे।

मुझे यकीन नहीं है कि आप UpdatePanels का उपयोग कर रहे हैं, लेकिन उस मामले में अतिरिक्त समस्याएं हैं। इसे पढ़ें: jQuery $(document).ready and UpdatePanels?

यदि आप अपडेटपैनल्स का उपयोग नहीं कर रहे हैं, तो मैं कहूंगा कि आपको पोस्टबैक (फॉर्म। विज़िबल) के दौरान सर्वर-साइड पर फ़ॉर्म को दिखाना होगा।

एएसपीनेट वेबफॉर्म मॉडल वास्तव में उपयोगी है, हालांकि यह निश्चित रूप से jQuery के साथ दिमाग में नहीं था। मेरी राय में, यदि आप वेब 2.0 प्रकार के अधिकांश दृष्टिकोण प्राप्त करना चाहते हैं, तो आप पोस्टबैक/अपडेट पैनेल का उपयोग करने और वेब सेवाओं के साथ और अधिक करने से दूर होने के बारे में सोचना चाहेंगे ... व्यक्तिगत रूप से, यह निश्चित रूप से खींच रहा है मैं एमवीसी की ओर बेकार है।

5

यह नहीं बल्कि कष्टप्रद लग सकता है, लेकिन इसे पूरा करने के

मैं छिपा मूल्यों का प्रयोग करेंगे जब आप प्रपत्र 1 से छिपा मूल्य अद्यतन खोलने , कहो

पृष्ठ HTML

input type="hidden" id="hiddenFormOpen" value="1" runat="server" 

सी # कोडबेहिंद

if (IsPostBack) 
    ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction", 
     "openForm("+hiddenFormOpen+")", true); 

जावास्क्रिप्ट समारोह

function openForm (val) 
{ 
    if (val ==1) 
    { 
     Update form visibility here 
    } 
} 

दूसरा विकल्प एक serverside पद वापस कर से बचने और एक पूरी तरह से ग्राहक आधारित एक इसलिए पोस्टबैक