2012-03-04 3 views
3

레이아웃 파일에 정의 된 섹션 목록을 가져 오는 방법이 있습니까? 예를 들어, Shared/_Layout.cshtml 파일에 정의 된 섹션을 알고 싶다면 레이아웃 파일을 구문 분석하여 레이아웃에 어떤 섹션이 있는지 알 수 있습니까?면도기 - 섹션 목록 가져 오기

답변

1

뷰를 실행하지 않아도 이름을 알 필요가 없기 때문에 제가 알고있는 내장 함수가 없습니다.

@RenderSection을 받아
[^@]@RenderSection\(\s*"(?<name>[^"]+)"\s*\) 

("foo는") 또는 @RenderSection ("foo는")하지만, 같은

당신은 아마 당신의 레이아웃을 통해 정규 표현식을 실행할 수는 @@ RenderSection합니다 (건너 뜁니다 @ @ 탈출구 @).

그러나 섹션의 이름이 문자열 리터럴로 전달된다고 가정합니다. 보기도 다음과 같이 표시 될 수 있습니다 (일반적인 상황은 아니지만 가능한 경우).

@RenderSection(Model.SectionName) 

이 경우 매우 많이 손실됩니다.

+0

작동하는 것처럼 보입니다. 레이아웃을 문자열로 읽는 가장 좋은 방법은 무엇입니까? – Victor

+0

보기가 이미 렌더링되어있을 때만 레이아웃을 알 수 있습니다 (작업에서보기 결과를 반환 할 때 마스터에게 명시 적으로 제공하는 경우 제외). 전체 아이디어를 약간 까다롭게 만들 수 있습니다. 레이아웃에 대한 (가상) 경로를 알고 있다면 [File.ReadAllText] (http://msdn.microsoft.com/de-de/library/system.io.file.readalltext.aspx)를 사용할 수 있습니다. –

+0

그래서 정규식을 테스트하려고합니다 : Regex layoutRegex = new Regex ("[^ @] @ RenderSection \ (\ s *"(? [^ "] +)"\ s * \) ") ; 정규식 문자열에 백 슬래시와 큰 따옴표가 포함되어 있으면 ""이스케이프 시퀀스를 이스케이프 문자로 사용하지 마십시오. "("이스케이프 시퀀스를 이스케이프 처리하지 않음 ") – Victor