2009-02-23 16 views
19

KISA:
Bir denetleyiciyi geçerli görünümü nasıl döndürürüm veya yalnızca hiçbir şey yapmamayı nasıl yaparım?NASIL? Denetleyici hiçbir şey/geçerli görünüm döndürür

UZUN:
Görüntüleyici oluşturduğum kısmi görünümü var. Bir sonraki görüntüyü almak için denetleyiciye bir istek gönderen bir bağlantı içerir (ajax kullanarak). Denetleyici bir sonraki görüntüyü getirir, onu ViewData'ya kaydeder ve kısmi bir görünümü (yukarıdaki) geri gönderir.

Şimdi, bugün yaptığım şey, denetleyicinin son görüntüye ulaştığında, aynı görüntüyü (yeniden sunarak) yeniden döndürmesi, ancak yine de yeni bir görünüm oluşturmasıdır, yani istemci/tarayıcı yeniden ayrıştırılır "aynı" veri.
Bu, bir şekilde optimal olmayan gibi gözüküyor.

Ne yapmak isterim, denetleyici son görüntüye ulaştığında basitçe hiçbir şey yapmamasıdır.
Null döndürürseniz, görünüm boş içerikle güncelleştirilir.
Görünüm/istemci/tarayıcının sahip olduğu her şeyi ve denetleyiciyi hiçbir şey yapmaması için saklamasını istiyorum.

[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

için teşekkürler, ama cevap ... Daha önce bunu düşünmüyordu inanamıyorum. Aşağıdakini sevmeyen bir sayfa var. javascript/jquery, kullanıcı arayüzünü güncellediğinden ve denetleyicimin bazı görevleri yerine getirmede başarılı olup olmadığını görmek için bir bayrak beklediğinden kullanıcı arabiriminde güncelleme yapmak için sunucu tarafında hiçbir şey yoktur. eğer evet ise, kullanıcı arayüzünü javascript/jquery ile güncellerim, eğer değilse tekrar sadece bir şey (bir onay işareti gibi) ile güncellemezler. Diğer tüm sayfa içeriği, kullanıcı eylemleri için javascript değişikliklerini öldüren yenileme etkisi olmadan olduğu gibi kalmayı seviyorum. Aşağıdaki ans. boş görünüm döndürürken çalışmıyor. – AKS

cevap

24

bunu hiçbir şey yapmak istiyorsanız, bir EmptyResult dönebilirsiniz ...

return new EmptyResult(); 

Eğer başarısız bir durum kodu sağlayarak güncelleştirmeyi önleyebilirsiniz AjaxHelper kullanıyorsanız (örn 404 ya da her neyse en uygun), açıkça herhangi elemanları güncellemeden önce başarılı bir yanıt için denetler o MicrosoftMvcAjax.js içinde javascript gibi div yerine durdururuz: -

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

Sonuçta Bundan kaçınmanın en iyi yolu, kısmi görünümü tasarlamaktır, böylece problemi ilk etapta önler (kendinizden söz ettiğiniz gibi).

+2

Evet, bir şey yapar, boş bir sonuç verir. Geri dönen ile aynı. Bu sadece boş içeriği gösterir. Yapmak istediğim bu değil. Onu istiyorum .. hmm .. hiçbir şey yapmayın, kurtarın, olduğu gibi şimdiki görünümü bırakın. Güncelleme yok. :) –

+0

Peki, AJAX ile çağırıyorsunuz, bu yüzden XMLHttpRequest'ten bir yanıt almalı mı? Sadece başarı geri aramada sonucun uzunluğunu kontrol edin ve eğer 0 dan büyükse içeriği yeni HTML parçanızla değiştirin aksi halde olduğu gibi bırakın. –

+0

"Yerleşik" ajax kullanıyorum: <% = Ajax.ActionLink ("Sonraki", "GetNextImage", "Resim", yeni {...}, yeni AjaxOptions {InsertionMode = InsertionMode.Replace, UpdateTargetId = "ImageDiv"})%> Basit javascripting gerekmeden basit bir çözüm umuyordum. –

0

MicrosoftMvcAjax kullandığınızı varsayarak, kullanıcıyı kaydırıcının sonuna ulaştıklarını bildiren bir JavascriptResult gönderebilirsiniz. Yanıt içerikten ziyade javascript ise, Microsoft içeriklerini değiştirmek yerine MicrosoftMvcAjax işleyicisi bunu yürütür. Tabii

[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"); 
} 

, muhtemelen daha yaratıcı olmak ve bir uyarı yerine jQuery iletişim eklentisi falan kullanmak isterdim.

+0

'Dönüş JavaScript'i (" alert ('Artık resim yok'); ");' görünümüm düz metin olarak değiştiriliyor uyarı ('Artık daha fazla resim'); ' – Mans

0

Tamam, anladım.
Sorunun bir çözümü değil, yine de sorunu çözüyor.

Görünüm son resmi gösterdiğinde "İleri" bağlantısını göstermeyeceğim.

henüz

Sadece ben ne arıyorum gibi çabalar adamlar

İlgili konular