2009-10-08 1 views
1

저는 Spark를 정말 좋아하지만, 우리는 이미 webforms 기반의 뷰에 많은 투자를했습니다. 기존의 모든 뷰를 변환하지 않고도 Spark을 사용하고 싶습니다.Spark보기 엔진은 webforms 마스터 페이지와 상호 운용됩니까?

spark가 webforms와 나란히 작동하는 유일한 문제는 마스터 페이지입니다. Currenly 나는 마스터 페이지의 1 복제본 1에 대한 스파크 레이아웃을 가지고 있습니다.

이 중복 량은 허용되지 않습니다. 나는 이미 여러 번 물 렸습니다.

Webforms 마스터 내에서 작동하도록 스파크 뷰를 만들 수있는 방법이 있습니까? 또는 spark 레이아웃 내에서 webforms보기가 작동하도록하려면 어떻게해야합니까? 중복 문제를 해결할 수 있습니다.

답변

5

내가 수행 한 방법은 내 마스터 페이지의 대부분의 내용을 부분보기로 옮긴 다음 두 개의 마스터 페이지 (Foo.Master 및 Foo.Master.spark)를 사용하여 동일한 HTML을 사용하는 것입니다. RenderPartial() 호출. 두 마스터는 모두 동일한 명명 된 컨텐츠 영역을 가지고 있습니다. 이를 통해 주어진 뷰에 대해 엔진을 사용할 수 있고 복제본을 가능한 작게 만들 수 있습니다.

개별보기 엔진은 마스터와보기를 모두 처리해야합니다. IViewEngine에 대한 호출은 다음과 같습니다.

FindView(System.Web.Mvc.ControllerContext controllerContext, string viewName, string masterName, bool useCache) 

마스터가 뷰와 별도로 렌더링되지 않습니다.

Spark는 멀티 패스 렌더링을 사용하여 마스터를보기 및 기타 트릭으로 컴파일하는 데 사용합니다.

+0

나는 이것이 합리적인 해결책이라고 생각한다. 완벽하지는 않지만 복제본의 대부분을 제거합니다. –

+0

마스터와 뷰 모두 렌더링을 담당하는 뷰 엔진을 사용하면 복제 또는 유지 관리 문제 (모든 스파크 뷰 또는 .aspx 뷰를 래핑하여 대체 엔진으로 렌더링 할 수 있음)없이 솔루션을 찾기가 어렵습니다. 가장 좋은 방법은 그 두 가지를 최소화하는 경로를 찾는 것입니다. –

1

나는 그렇게 생각하지 않는다. 구조적으로 두 가지는 페이지를 렌더링하는 완전히 다른 충돌 방식을 가지고 있습니다. 그것이 일어나게하려면 iFrame과 같은 무언가를해야 할 것입니다. iFrame은 반 패턴이되는 정도까지 발생시키는 끔찍한 방법입니다.

마스터 페이지를 읽을 때까지 스파크 엔진이 이미 완료되고 그 반대의 경우도 마찬가지입니다.

마스터 페이지가 스파크 엔진 내에서 렌더링되는 방법을 모방하려고 할 수 있습니다. 시각적으로뿐만 아니라 스파크 (spark)를 사용하는 홈 압연 마스터 페이지 프리 프로세서 (pre-processor)를 함께 사용하는 것에 대해 이야기하고 있습니다. 괭이 갈 줄도 쉽지 않아.

0

Spark 엔진을 사용하여 요청한 .spark보기를 렌더링하고 WebForms 엔진을 호출하여 렌더링 된 내용을 전달하는 사용자 지정보기 엔진 (또는 조정할 내용)을 작성하는 것이 좋습니다. , 그러나 나는이 내부에 대한 지식이 없다. 더 쉬운 방법은 렌더링 된 .spark HTML을 .aspx로 저장하고 WebForms가 선택하도록하는 것이지만 성능은 받아 들일 수 없습니다.

어쨌든, 나는 가능해야한다고 말하고 싶지만 1) 뷰 엔진의 복잡한 조정이 필요하고 2) .spark 뷰가 대부분 스파크 레이아웃없이 렌더링되기 때문에 Spark/layouts 기능의 대부분을 잃을 것입니다 조금도.

또한 Spark 메일 링리스트에 문의하십시오.

+0

스파크는 이미이 작업을 수행합니다. 문제는 올바른 파일을 렌더링하지 않고 .spark 또는 .aspx 파일에 단일 마스터 페이지를 사용하게하는 것입니다. – rball

+0

흠, 알 겠어. XSLT를 사용하여 spark 페이지를 aspx로 변환하려고 할 수도 있습니다. 매우 구체적인 기능을 사용하지 않는 한. 한 번 XSLT를 사용하여 XML에서 C++/C# 라이브러리 소스를 생성 했으므로 가능할 수도 있습니다. Spark이 <%%> 구문을 인식하는 데 도움이됩니다. 그러나 사실 두 권을 지키는 것이 더 쉬울 수도 있습니다. 나는 당신이 마스터 페이지를 너무 많이 바꾸 었다고 생각하지 않는다. – queen3

0

행운이 뭐니?

스파크보기에서 System.Web.Mvc.ViewUserControl 호출 Html.RenderView()에서 스파크보기를 호스팅 할 수있었습니다. System.Web.Mvc.ViewUserControl 내에서 Html.RenderView()를 사용하여 Spark 뷰를 호스팅 할 수도 있습니다. 여기에는 마스터 페이지를 공유하는 몇 가지 옵션 (오버 헤드 포함)이 있습니다.

  1. 간단한 .war .ascx 파일을 작성하십시오. 그들은 동일한 모델 객체를 가졌고 래퍼는 래핑 된 뷰에서 HtmlRenderPartial을 호출 할 수있었습니다.

  2. (반대의 경우) .ascx 컨트롤에 대한 간단한 래퍼 .spark를 작성하십시오. 내가보기 Index.spark 사용 masterpage의 Site.Master을 시도

, 나는 오류 메시지 수신 :

The view 'Index' or its master could not be found. The following locations were searched: 
~/Views/LfgSettings/Index.aspx 
~/Views/LfgSettings/Index.ascx 
~/Views/Shared/Index.aspx 
~/Views/Shared/Index.ascx 
Layouts\Site.spark 
Shared\Site.spark 

나는 이러한 경로는하지만 무엇을 나타내는 지 모르겠어요, 그것은 검색과 같은 경로 및 해당 마스터 페이지의 검색 경로 .spark 파일은 .master 마스터 페이지를 사용할 수 없습니다.

올바른 내용 영역이있는 .spark 파일을 호출하는 래퍼 .master 파일을 작성할 수 있는지 궁금합니다. 일부 Reflector'ing은 아마도 함께 일할 수있는 몇 가지 인터페이스를 파헤칠 것입니다.

+0

나는 그것을 실제로 포기했다. –

+0

하하 동일. Spark를 사용하기 위해 기존에 사용하던 몇 개의 페이지를 변환하는 것이 쉬웠습니다. –

0

기존 마스터 페이지를 기존의 마스터 페이지에서 사용할 수 있도록 간단하게 Html.RenderPartial ("MySparkView")를 호출하는 매우 간단한 .aspx 페이지로 기존 마스터 페이지를 사용할 수 있습니다.