2009-02-23 16 views
19

लघु:
मैं नियंत्रक को वर्तमान दृश्य कैसे वापस कर सकता हूं या बस कुछ भी नहीं कर सकता?कैसे? नियंत्रक कुछ भी नहीं/वर्तमान दृश्य

लंबा:
मेरे पास आंशिक दृश्य है जहां मैंने छवियों का निर्माण किया है। इसमें एक लिंक है जो अगली छवि (AJAX का उपयोग करके) प्राप्त करने के लिए नियंत्रक को अनुरोध भेजता है। नियंत्रक अगली छवि प्राप्त करता है, इसे व्यूडाटा में संग्रहीत करता है और एक आंशिक दृश्य (ऊपर एक) भेजता है।

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

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

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult GetNextImage(...) 
    { 
     if(Request.IsAjaxRequest()) 
     { 
      if(CURRENT_IMAGE != LAST_IMAGE) 
      { 
       Image image = GetNextImage(...); 
       var partialViewResult = new PartialViewResult(); 
       partialViewResult.ViewName = "ImageSlide"; 
       partialViewResult.ViewData.Model = image; 
       return partialViewResult; 
      } 
      else 
      { 
       // DO NOTHING, HOW? 
      } 
     } 

     return RedirectToAction("Error", "Home"); 
    } 
+0

के लिए

धन्यवाद, लेकिन अभी तक कोई जवाब नहीं। नीचे वाला पृष्ठ ताज़ा पृष्ठ है, जिसे मैं पसंद नहीं करता हूं। क्योंकि मेरे जावास्क्रिप्ट/jquery ने यूजर इंटरफेस को अपडेट किया है और यूआई पर अपडेट करने के लिए सर्वर साइड से कुछ भी नहीं है जो सिर्फ एक ध्वज को देखने की उम्मीद करता है कि मेरा नियंत्रक कुछ कार्य निष्पादित करने में सफल है या नहीं। यदि हां, तो मैं जावास्क्रिप्ट/jquery के साथ UI को अद्यतन करता हूं, अगर नहीं तो फिर कुछ चीज़ (जैसे चेक मार्क) को अपडेट करें। अन्य सभी पेज सामग्री जिन्हें मैं रहना पसंद करता हूं क्योंकि यह ताज़ा प्रभाव के बिना था जो उपयोगकर्ता क्रियाओं के लिए जावास्क्रिप्ट परिवर्तन को मारता है। नीचे उत्तर। काम नहीं कर रहा क्योंकि यह रिक्त दृश्य वापस करता है। – AKS

उत्तर

24

आप एक EmptyResult लौट सकते हैं यदि आप इसे कुछ भी नहीं करना चाहते हैं ...

return new EmptyResult(); 

क्या आप एक असफल स्थिति कोड की आपूर्ति करके अद्यतन से बच सकते हैं AjaxHelper उपयोग कर रहे हैं (उदाहरण के लिए 404 या जो कुछ भी सबसे उपयुक्त है), कि यह MicrosoftMvcAjax.js में जावास्क्रिप्ट के रूप में अपने div की जगह बंद कर देंगे स्पष्ट रूप से किसी भी तत्व को अद्यतन करने से पहले एक सफल प्रतिक्रिया के लिए जाँच करता है: -

this.ControllerContext.HttpContext.Response.StatusCode = 404; 
return new EmptyResult(); 

अंततः इससे बचने का सबसे अच्छा तरीका आंशिक दृश्य को डिजाइन करना है, इसलिए यह पहली जगह में समस्या से बचाता है (जैसे आप स्वयं का उल्लेख करते हैं)।

+2

अच्छी तरह से यह कुछ करता है, यह एक खाली परिणाम देता है। वापस लौटने के समान ही। यह बस खाली सामग्री दिखाता है। यही वह नहीं है जिसे मैं करना चाहता हूं। मैं इसे चाहता हूं .. हम्म .. कुछ भी नहीं, जमानत, वर्तमान दृश्य को छोड़ दें। कोई अपडेट नहीं। :) –

+0

ठीक है आप इसे AJAX के माध्यम से कॉल कर रहे हैं, इसलिए इसे XMLHttpRequest से प्रतिक्रिया प्राप्त करनी है? सफलता कॉलबैक में परिणाम की लंबाई की जांच करें और यदि यह 0 से अधिक है तो अपने नए HTML खंड के साथ सामग्री को प्रतिस्थापित करें अन्यथा इसे छोड़ दें। –

+0

मैं "अंतर्निर्मित" AJAX का उपयोग कर रहा हूं: <% = अजाक्स.एक्शनलिंक ("अगला", "GetNextImage", "छवि", नया {...}, नया अजाक्सऑप्शन {InsertionMode = InsertionMode.Replace, UpdateTargetId = "ImageDiv"})%> किरकिरा जावास्क्रिप्टिंग आदि की आवश्यकता के बिना एक साधारण समाधान की उम्मीद कर रहा था –

0

मान लें कि आप MicrosoftMvcAjax का उपयोग कर रहे हैं, तो आप एक जावास्क्रिप्ट रीसेट भेज सकते हैं जो उपयोगकर्ता को अलर्ट करता है कि वे स्लाइडर के अंत तक पहुंच गए हैं। यदि प्रतिक्रिया सामग्री की बजाय जावास्क्रिप्ट है, तो MicrosoftMvcAjax हैंडलर इसे DOM सामग्री को बदलने के बजाय निष्पादित करता है।

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetNextImage(...) 
{ 
    if(Request.IsAjaxRequest()) 
    { 
     if(CURRENT_IMAGE != LAST_IMAGE) 
     { 
      Image image = GetNextImage(...); 
      var partialViewResult = new PartialViewResult(); 
      partialViewResult.ViewName = "ImageSlide"; 
      partialViewResult.ViewData.Model = image; 
      return partialViewResult; 
     } 
     else 
     { 
      return JavaScript("alert('No more images');"); 
     } 
    } 

    return RedirectToAction("Error", "Home"); 
} 

बेशक, आप शायद अधिक रचनात्मक बनना चाहते हैं और एक चेतावनी के बजाय jQuery संवाद प्लगइन या कुछ का उपयोग करना चाहते हैं।

+0

'रिटर्न जावास्क्रिप्ट (" अलर्ट ('कोई और छवियां'); "); 'मेरे दृश्य में सादे टेक्स्ट में बदलना 'चेतावनी' ('कोई और छवियां' नहीं); ' – Mans

0

ठीक है, मुझे मिल गया है।
मेरे प्रश्न का समाधान नहीं है लेकिन अभी भी समस्या हल करता है।

जब दृश्य अंतिम छवि दिखाता है तो मैं बस "अगला" लिंक नहीं दिखाऊंगा।

मानना ​​है कि नहीं कर सकते कि मैंने पहले इसके बारे में नहीं सोचा था ... बस मैं क्या देख रहा हूँ की तरह अपने प्रयासों लोग

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