2011-04-29 41 views
0

我有一個操作篩選器,它在運行時根據它是否是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

+0

你有沒有得到這個工作? – joshcomley 2011-05-17 07:21:58

+0

對不起,喬希,我還沒有。諷刺的是,我嘗試使用剃刀來解決升級到MVC3時遇到的另一個問題。我結束了只是改變我的WebForm視圖解決我原來的渲染問題。我還沒有複製它在一個簡單的項目。乾杯西蒙。 – 2011-05-18 23:36:46

回答

0

嘗試重寫的OnActionExecuted代替OnResultExecuting

public class AjaxActionFilterAttribute : ActionFilterAttribute 
{ 
    public string MasterPage { get; set; } 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     base.OnActionExecuted(filterContext); 
     var result = filterContext.Result as ViewResult; 
     if (filterContext.HttpContext.Request.IsAjaxRequest() && result != null) 
     { 
      result.MasterName = MasterPage; 
     } 
    } 
} 
+0

感謝Darin, 這不起作用,所以我想我會試着看看我是否可以從一個空的MVC項目開始複製它以排除其他干擾因素。 乾杯西蒙 – 2011-05-01 23:11:27