我有一個操作篩選器,它在運行時根據它是否是ajax調用來更改主/佈局頁面。但是,當它是一個Ajax調用時會觸發System.Web.HttpException。 此ActionFilter可與WebForms引擎正常工作,但會對razorengine引發異常。 例外:在ActionFilter.OnResultExecuting期間更改MasterName拋出異常
的 「RenderBody」 方法沒有被調用的頁面佈局 「〜查看/ XXXX/Empty.cshtml /」
的行爲過濾:
public class AjaxActionFilterAttribute : ActionFilterAttribute
{
public string MasterPage { get; set; }
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.Headers["X-Requested-With"] != null
&& filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
var viewResult = filterContext.Result as ViewResult;
if (viewResult != null)
{
viewResult.MasterName = MasterPage;
}
}
}
}
我的行動被標記與此屬性如下:
[AjaxActionFilter(MasterPage = "Empty")]
[AcceptVerbs(HttpVerbs.Get), ActionName("Index"), CollectionAction]
public override ActionResult CollectionAction()
{
...
}
編輯:當然還有我的佈局視圖是Empty.cshtml如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="DefaultMasterHead">
@RenderSection("styles", false)
</head>
<body>
<div>
@RenderBody()
</div>
@RenderSection("scripts", false)
</body>
</html>
如果我用非Ajax調用觸發視圖,那很好,但如果它是Ajax調用,則會引發異常。同樣,正如我所說的,它適用於WebForms引擎。
任何人都可以解釋可能會發生什麼嗎?
TIA
你有沒有得到這個工作? – joshcomley 2011-05-17 07:21:58
對不起,喬希,我還沒有。諷刺的是,我嘗試使用剃刀來解決升級到MVC3時遇到的另一個問題。我結束了只是改變我的WebForm視圖解決我原來的渲染問題。我還沒有複製它在一個簡單的項目。乾杯西蒙。 – 2011-05-18 23:36:46