怎么样?控制器返回任何/当前视图

Den*_*gue 28 asp.net-mvc

简介:
如何让控制器返回当前视图或只是什么都不做?

LONG:
我有一个局部视图,我已经创建了一个图像滑动器.它包含一个链接,它向控制器发送请求以获取下一个图像(使用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");
    }
Run Code Online (Sandbox Code Playgroud)

Joh*_*ter 29

如果你想让它什么都不做,你可以返回一个EmptyResult ......

return new EmptyResult();
Run Code Online (Sandbox Code Playgroud)

如果您正在使用AjaxHelper,则可以通过提供不成功的状态代码(例如404或其他任何最合适的代码)来避免更新,这将阻止它替换您的div,因为MicrosoftMvcAjax.js中的javascript显式检查成功响应之前更新任何元素: -

this.ControllerContext.HttpContext.Response.StatusCode = 404;
return new EmptyResult();
Run Code Online (Sandbox Code Playgroud)

最终避免它的最好方法是设计局部视图,以便首先避免问题(就像你自己提到的那样).

  • 好吧,它会做一些事情,它会返回一个空的结果.与返回null相同.这只是显示空内容.这不是我想要的.我希望它......嗯......什么都不做,拯救,保持现状.没有更新.:) (4认同)