如果我已经理解了关于IsAjaxRequest的第一次加载页面的意见,那么您需要完整的视图,而不是部分......但是这几乎是使用IsAjaxRequest的规范原因。
因此,所有你需要的是:
if (Request.IsAjaxRequest)
{
return View();
}
else
{
return PartialView("myPartial");
}
唯一的其他情况下,我能想到的是,你正在使用重定向,例如,如果实施后重定向获取模式。在这种情况下,您可以重写控制器中的OnResultExecuted方法以将IsAjaxRequest的结果存储在TempData中。
这样,当Get请求到达服务器时,您可以在TempData中检查您的变量。如果它是空的,那么它是一个“原始”请求,所以返回整个页面。否则,它是一个重定向请求,原始请求是一个Ajax请求,您可以安全地返回部分视图。即:
在控制器写属性,如下所示:
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无论在哪里,都知道它会起作用。或者说,我已经使用它来构建一个基本的WizardController,它对于Ajax是否可用是完全透明的。一件美丽的东西,非常干燥,特别是如果包装到一个基地控制器。
但是,我推测,因为你的问题不清楚。
实现此目的的方法是通过'Request.IsAjaxRequest',我不明白你为什么不能使用它。 – 2010-11-16 07:22:42