所以我有这样的一页:
……
现在,我正在使用Ajax和所有这些更新这个注释div。现在,如果用户禁用了javascript,操作结果“注释”仍然返回partialView,但这次它将替换整个页面,而不是只返回div "CommentsDiv“。它破坏了页面的格式,因为母版页已经消失。整个网站都有很多这样的场景。
如果partialView即将呈现为全视图,我可以普遍指定这样的内容吗?!(就像可能重定向到一个仅引用部分视图的主页的虚拟全页)。还有其他方法吗?
注意到我根本不能做"IsAjaxRequest",因为第一次加载页面时,它不会是Ajax请求,但是操作结果仍然应该返回partialview。
发布于 2010-11-16 09:20:59
如果我理解了您对IsAjaxRequest的评论,当页面第一次加载时,您需要的是完整的视图,而不是部分的.但这几乎是使用IsAjaxRequest的典型原因。
所以你所需要的就是:
if (Request.IsAjaxRequest)
{
return View();
}
else
{
return PartialView("myPartial");
}我唯一能想到的其他场景是您使用重定向的位置,例如,如果实现Post重定向Get模式。在这种情况下,您可以重写控制器中的OnResultExecuted方法,以便将IsAjaxRequest的结果存储在TempData中。
这样,当Get请求到达服务器时,您可以在TempData中检查变量。如果它是空的,那么它是一个“原始”请求,所以返回整个页面。否则,它是一个重定向请求,而最初的请求是Ajax请求,您可以安全地返回部分视图。Ie:
在控制器中写入属性如下:
public bool ImReallyAnAjaxRequest
{
get
{
if (TempData["ImAjax"] == null) return false;
if (TempData.ContainsKey("ImAjax"))
{
return (bool)TempData["ImAjax"];
}
else if (Request.IsAjaxRequest())
{
return true;
}
else
{
return false;
}
}
}然后,按照以下方式编写OnResultExecuted:
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
{
TempData[keyIsAjaxRequest] = Request.IsAjaxRequest();
}
}这样你就可以覆盖所有的角度,你可以在其他任何地方使用ImReallyAnAjaxRequest,并且知道它会工作,不管是什么场景。或者说,我使用它构建了一个对Ajax可用或不可用的完全透明的基础WizardController。非常干燥的东西,尤指包装在底座控制器上的东西
不过,我猜想,因为你的问题还不清楚。
https://stackoverflow.com/questions/4191527
复制相似问题