2012-09-24 13 views
10

मेरे पास एमवीसी में सरल AJAX फ़ॉर्म है। AjaxOptions में सरल जावास्क्रिप्ट फ़ंक्शन पर ऑनकंपलेट सेट है जो एक चीज करता है - झूठा रिटर्न देता है।Ajax.BeginForm ऑनकंपलेट हमेशा अद्यतन पृष्ठ

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "DivFormId", HttpMethod = "Post", OnComplete = "preventUpdate" })) 

function preventUpdate(xhr) { 
    return false;  
} 

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

प्राप्त प्रतिक्रिया के आधार पर पृष्ठ अपडेट को कैसे रोकें?

धन्यवाद!

----- अद्यतन -------

अब तक मैं निम्नलिखित समाधान मिल गया। जब मैं UpdateTargetId निर्दिष्ट नहीं करता हूं, तो मैं जो प्रतिक्रिया चाहता हूं उसके साथ मैन्युअल रूप से कर सकता हूं। लेकिन यह अभी भी झूठी वापसी के साथ दस्तावेज व्यवहार नहीं है।

+0

शायद यह मदद मिलेगी, यह भी पहली टिप्पणी http://stackoverflow.com/a/1357151/985284 –

+1

पर देखने मामला यह नहीं है (लेकिन यह सुनिश्चित करने के लिए, मैंने इन दो विधियों को भी आजमाया)। यह ओएसबीजिन, ऑनकंपलेट, जैसे कार्यक्रमों के साथ अजाक्स। बेगिनफॉर्म के लिए एमएस हैंडलिंग है ... और एमएसडीएन दस्तावेज़ के अनुसार ऑनकंपलेट झूठी वापसी से रोकना संभव होना चाहिए। –

उत्तर

22

OnSuccess का उपयोग करें और UpdateTargetId से छुटकारा पाएं।

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post", OnSuccess = "foo" })) 
{ 
    ... 
} 

और उसके बाद: इस तरह

function foo(result) { 
    if (result.SomePropertyThatExistsInYourJsonObject) { 
     // the server returned a JSON object => show the dialog window here 
    } else { 
     // the server returned a partial view => update the DOM: 
     $('#DivFormId').html(result); 
    } 
} 
+0

'$ ('# DivFormId')। Html (result.responseText); 'मेरे लिए काम किया – Filip

+0

Ajax.BeginForm का उपयोग करने के लिए आपको निम्न जावास्क्रिप्ट फ़ाइल की आवश्यकता है (जो एमवीसी 5 टेम्पलेट में मानक नहीं आती है): jquery। unobtrusive-ajax.js https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/3.2.3 – Baxter

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