2014-09-15 3 views
0

자바 스크립트를 사용하지 않는 사용자가 사용할 수있게하려는 SPA에서 작업하고 있습니다. 이 작업을 수행하기 위해 제출 및 탐색 버튼에 ajax 도우미 메서드를 사용합니다.이 버튼은 기본적으로 스크립트가 비활성화되었을 때 일반 http 요청으로 돌아갑니다.@section 렌더링 프로세스 수정

그때 내 컨트롤러 전체 조회수로 내 파셜의 각을 렌더링하고 다음으로 _ViewStart.cshtml를 오버라이드 (override) :

@{ 
    Layout = Request.IsAjaxRequest() || ViewContext.IsChildAction 
     ? null 
     : "~/Views/Shared/_Layout.cshtml"; 
} 

이렇게함으로써, 아약스 요청은 기본적으로있는 동안 비 아약스 요청 것, 파셜을 반환 레이아웃을 사용하고 전체보기를 반환하십시오.

이 문제는 뷰가 레이아웃없이 렌더링 될 때 @section이 부딪치지 않도록 각 뷰에 일부 논리를 포함해야한다는 것입니다.

@{ 

    bool _partial = Request.IsAjaxRequest() || ViewContext.IsChildAction; 

    Layout = _partial ? null : "~/Views/Shared/_Layout.cshtml"; 

} 
@if (!_partial) 
{ 

    @section Styles{ 
     <style> 
      **some style** 
     </style> 
    } 

    @section Scripts{ 
     <script type="text/javascript"> 
      **some script** 
     </script>    
    } 

    ** body ** 

} 
else 
{ 
    <style> 
     **some style** 
    </style> 

    <script type="text/javascript"> 
     **some script** 
    </script> 

    ** body **  
} 

기본적으로이 내가 내가 변경할 때 코드의 두 세트를 업데이트 할 필요가로 지저분 각 뷰, 코드를 복제 할 필요가 있음을 의미 예를 들면 다음과 같습니다이다. @section을 사용하여 _partial 검사를 수행하고 @section (예 : .section Scripts {} 또는 HTML 스크립트 태그)이 사용되는 곳마다 RenderSection 또는 HTML을 사용하여 렌더링 할 수있는 확장 프로그램을 작성할 수있는 방법이 있습니까? 단일보기 만 작성하면됩니까?

+0

'