2009-02-23 72 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

好的,我明白了。
不是我的问题的解决方案,但仍能解决问题。

当视图显示最后一张图片时,我不会显示“下一步”链接。

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

感谢你的努力的家伙

相关问题