2011-06-08 19 views
10

में पुरानी मानों को कैशिंग करना JQuery UI के साथ एक मॉडल संवाद में एक फॉर्म का उपयोग कर मुझे एक प्रमुख सिरदर्द है। जब कोई लिंक किसी लिंक पर क्लिक करता है तो संवाद प्रदर्शित होता है। पहली बार फॉर्म खोला गया है, यह ठीक काम करता है; फॉर्म सर्वर पर सबमिट किया गया है, युक्त पृष्ठ AJAX के माध्यम से अद्यतन किया गया है, और संवाद बंद हो जाता है। हालांकि, फॉर्म का उपयोग करने के बाद के प्रयासों में समस्याएं शुरू होती हैं।jQuery यूआई संवाद मोडल फॉर्म AJAX अनुप्रयोग

इसका उपयोग करने के दूसरे प्रयास पर, फॉर्म को पिछले सबमिशन के मूल्यों के साथ सबमिट किया गया है, पृष्ठ सामग्री अपडेट होने के बावजूद। यह तब भी होता है जब मैं एप्लिकेशन में एक अलग स्क्रीन पर नेविगेट करता हूं और फिर वापस आ जाता हूं। प्रत्येक सबमिशन के बाद पुन: प्रस्तुत किए गए पृष्ठ की सामग्री में शामिल है जो संवाद बनाता है, इसलिए 'पुराने' मान जो सबमिट किए जा रहे हैं पृष्ठ मार्कअप में मौजूद नहीं है। वे JQuery UI द्वारा किसी भी तरह 'याद' किया जा रहा है। मुझे नहीं पता कि इस व्यवहार के आसपास कैसे काम करना है और यह मुझे पागल कर रहा है।

सामग्री अद्यतन होने पर JQuery संवाद को पिछले प्रपत्र सबमिशन के बारे में कैसे भूल सकता है?

मैं JQuery 1.3.2 के साथ JQuery UI 1.7.2 का उपयोग कर रहा हूं, और एप्लिकेशन एएसपी.नेट एमवीसी 3 में बनाया गया है (हालांकि मुझे विश्वास नहीं है कि सर्वर-पक्ष में कोई समस्या है)। मैं JQuery का उपयोग कर रहा हूं जो संस्करण का उपयोग कर रहा हूं।

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

//shows dialog containing form; triggered by clicking a hyperlink 
function showForm() {  
    $('#divForm').dialog({ 
     modal: true, 
     draggable: false, 
     resizable: false, 
     title: summary, 
     width: 400 
    }); 
} 

//submits the form; triggered by clicking 'Save' button from the dialog 
function save() { 
    var postData = $('#frmAddNew').serialize(); 

    $.post('/Item/Save', postData, function (response, status) { 
      $('#divForm').dialog('destroy'); 
      $('#divContent').html(response); //response mark up contains a new 'divForm' element 
     }, 'html'); 
    } 
} 

यहाँ फार्म की मार्कअप है और यह div युक्त है। TxtDate, txtTime और hdnId के लिए नए मानों के साथ सबमिट करने के बाद पृष्ठ में पुनः लोड किया गया है (एक PartialViewResult)। ये वे इनपुट हैं जिनके पुराने मूल्यों को बनाए रखा गया है।

<div id="divForm" class="admPanel hidden"> 
<form id="frmAddNew" action="/Item/Save" method="post"> 
    <input id="hdnId" name="UserId" type="hidden" value="3"> 
    <div> 
     <label for="txtDate">Admin Date:</label> 
     <input id="txtDate" name="AdministrationDateTime" type="text" value="8 Jun 2011"> 
     <br> 
     <label for="txtTime">Admin Time:</label> 
     <input id="txtTime" name="AdministrationDateTime.Time" type="text" value="21:45"> 
     <br> 
     <label>Outcome:</label> 
    <input id="txtOutcome" name="AdministrationOutcome" type="text" value=""> 
     <br> 
    </div> 
</form> 
<p> 
    <input class="buttonNormal" id="btnSave" onclick="save();" type="button" value="Save"> 
</p> 

divContent एक खाली div जो एक मास्टर पेज में रहती है और सामग्री के साथ अतुल्यकालिक रूप से भरी हुई है है।

+0

क्या आप अपना मार्कअप कृपया साझा कर सकते हैं, विशेष रूप से #divForm, #divContent और $। पोस्ट प्रतिक्रिया। और यदि #frmAddNew #divform में नहीं है, तो उसे भी साझा करें। – Niklas

+0

निश्चित रूप से, प्रश्न संपादित किया। –

उत्तर

6

मैं आपके कोड से क्या व्याख्या कर सकता हूं, आप वास्तव में पिछले रूपों को हटा नहीं रहे हैं। आप बस उनसे संवाद हटा रहे हैं।

विधि के रूप में वर्णन किया गया है:

पूरी तरह से संवाद कार्यक्षमता निकालें। यह तत्व को वापस अपने प्री-इनिट स्थिति में वापस कर देगा।

इसका मतलब अभी भी वहां है।

प्रयास करें इस ($ ('#divForm').remove(); ध्यान दें):

$.post('/Item/Save', postData, function (response, status) { 
      $('#divForm').remove(); 
      $('#divContent').html(response); //response mark up contains a new 'divForm' element 
     }, 'html'); 
    } 
+1

धन्यवाद, यह पूरी तरह से काम करता है।मैं इस धारणा के तहत काम कर रहा था कि नई सामग्री डालने पर पुरानी सामग्री को पूरी तरह से हटा दिया गया था। मान लीजिए मुझे फिर से सोचने की ज़रूरत है। –

+1

मुझे पता है कि यह एक बहुत पुरानी पोस्ट है, हालांकि, कोड के लिए धन्यवाद क्योंकि यह मेरी स्वच्छता को बचाता है और मेरे प्रोजेक्ट के मुद्दों को ठीक करता है। – Hybride

5
मेरी समाधान के साथ

मैं उपयोग कर रहा हूँ

संवाद ('बंद') ('नष्ट') के बजाय संवाद

+0

धन्यवाद। यह सबसे अच्छा समाधान है। – Vincent

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