怎么样? 控制器返回什么/当前视图
短:
我如何让控制器返回当前视图或者什么都不做?
长:
我有一个局部视图,我创建了一个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");
}
如果您希望它什么也不做,您可以返回一个EmptyResult ...
return new EmptyResult();
如果你使用的是AjaxHelper,你可以通过提供一个不成功的状态代码来避免更新(例如404或任何最合适的代码),这将阻止它替换你的div,因为MicrosoftMvcAjax.js中的JavaScript显式检查成功响应更新任何元素: -
this.ControllerContext.HttpContext.Response.StatusCode = 404;
return new EmptyResult();
最终避免它的最好方法是设计局部视图,以便首先避免出现问题(就像你自己提到的那样)。
假设你使用的是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对话框插件或其他东西而不是警报。
好吧,我明白了。
不是我的问题的解决方案,但仍解决了这个问题。
当视图显示最后一张图片时,我不会显示“下一步”链接。
不敢相信我以前没有想到......
感谢你的努力