ajax 호출인지 여부에 따라 런타임에 마스터/레이아웃 페이지를 변경하는 작업 필터가 있습니다. 그러나 그것은 Ajax 호출 일 때 System.Web.HttpException을 발생시킵니다. 이 ActionFilter는 WebForms 엔진과 잘 작동하지만 razorengine을 사용하여 예외를 throw합니다. 예외 :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>
이 괜찮습니다하지만이 경우 아약스는 예외를 throw 전화를 호출합니다. 다시 말하지만, WebForms 엔진에서 올바르게 작동합니다.
여기에 무슨 일이 일어나는지 설명 할 수있는 사람이 있습니까?
TIA
를 혹시이 작업나요? – joshcomley
죄송합니다. Josh, 아직 없습니다. 아이러니하게도 MVC3으로 업그레이드 할 때 또 다른 문제를 해결하기 위해 면도기를 시험해 보았습니다. 필자는 원래의 렌더링 문제를 해결하기 위해 WebForm보기를 변경했습니다. 나는 아직 간단한 프로젝트에서 그것을 복제하지 않았다. 건배 Simon. –