2009-02-23 139 views
19

SHORT:
如何讓控制器返回當前視圖或只是簡單地不做任何事情?如何?控制器不返回任何內容/當前視圖

LONG:
我有一個局部視圖,我創建了一個imagelider。 它包含一個鏈接,它向控制器發送請求以獲取下一個圖像(使用ajax)。 控制器讀取下一個圖像,將其存儲在ViewData中併發回部分視圖(上面的圖像)。

現在,我今天做的是,當控制器到達最後一張圖像時,它會重新返回相同的圖像(通過重新設定它),但仍會創建一個新視圖,即客戶機/瀏覽器重新解析「相同」的數據。
這似乎有點不理想。

我想要做的是,當控制器到達最後一個圖像時,它應該什麼也不做。
如果我返回null,那麼視圖更新爲空內容。
我希望視圖/客戶端/瀏覽器保留它所擁有的任何內容,並且控制器不做任何事情。

[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

就像我所期待的,但沒有答案。下面是一個令人耳目一新的頁面,我甚至不喜歡。因爲我的javascript/jquery更新了用戶界面,並且服務器端沒有什麼更新用戶界面,只是期望一個標誌來查看我的控制器是否成功執行某個任務。如果是的話,我更新用JavaScript/jQuery的用戶界面,如果不是,那麼只用它更新某些東西(如複選標記)。我喜歡保留所有其他頁面內容,因爲它沒有刷新效果,因此不會爲用戶操作殺死JavaScript更改。下面的答案。不工作,因爲它返回空白視圖。 – AKS 2015-06-22 07:31:07

回答

24

,如果你想讓它做什麼你可以返回一個EmptyResult ...

return new EmptyResult(); 

如果您正在使用的AjaxHelper你能避免通過提供一個失敗的狀態碼更新(如404或什麼是最合適的),這會阻止它免去您的DIV在MicrosoftMvcAjax.js的JavaScript明確地檢查一個成功的響應更新任何元素之前: -

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

最終避免它的最好方法是設計局部視圖,這樣可以避免第一個問題(就像你自己提到的那樣)。

+2

好吧,它會做一些事情,它會返回一個空的結果。 與返回null相同。 這只是顯示空的內容。 這不是我想要的。 我希望它..嗯..什麼都不做,保釋出來,保持目前的觀點。 沒有更新。 :) – 2009-02-23 21:22:58

+0

那麼你是通過AJAX調用它,所以它必須從XMLHttpRequest接收響應?只需在成功回調中檢查結果的長度,並且如果它大於0,則用新HTML片段替換內容,否則保持原樣。 – 2009-02-23 21:26:52

0

假設您正在使用MicrosoftMvcAjax,您可以發回一個JavascriptResult,提醒用戶他們已到達滑塊的末端。如果響應是javascript而不是內容,則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

好的,我明白了。
不是我的問題的解決方案,但仍能解決問題。

當視圖顯示最後一張圖片時,我不會顯示「下一步」鏈接。

不能相信我之前沒想到它......

感謝你的努力的傢伙

相關問題