2009-06-18 3 views
5

우선, MVC에서 내 뷰의 서버 측 컨트롤에 액세스하는 것이 눈살을 찌푸리게한다는 것을 알게되었습니다. 그러나, 나는 나의 상황에서 (내가 볼 수있는 한) 필요가있다. 여기에 내 이야기가있다. :)MVC 프로젝트의 코드 숨김에서 서버 측 컨트롤에 액세스하려면 어떻게해야합니까?

제 웹 응용 프로그램에서 사용하는 제 3 자 컨트롤이 있습니다. 현재 WebForms 솔루션을 MVC로 이식하는 작업이 있습니다. 이 특별한 써드 파티 웹 컨트롤은 WebForms 아키텍처를 필요로하므로, WebForms 프로젝트에서 같은 코드를 사용하려고합니다.

initial approach은 두 개의 웹 사이트 (WebForms 사이트와 MVC 사이트)를 가지고 MVC 측에서 iFrames를 사용하여 링크하는 것입니다. 그게 효과가 있다는 것을 알지만,이 특별한 컨트롤을 사용하는 것은 약간의 잔인한 행동이었습니다. 더 많은 연구를 한 후에 나는 소년들을 섞고 MVC 프로젝트 내에서 WebForms 아키텍처를 사용할 수있는 discovered을 작성했습니다. 따라서 찍은 새로운 접근 방식은 특정 디렉터리 (예 : 'View \ SomeDir \ WebForms')에이 타사 컨트롤을 사용하는 페이지를 복사 한 다음 내 global.asax에서 해당 디렉터리를 무시합니다. 파일 MVC 라우팅 시스템을 선택하지 않도록 :

불행하게도
routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}"); 

내 MVC 프로젝트에 ASPX 페이지를 복사 할 때, 나는 코드 숨김이 내 제어 나에게 액세스 권한을 부여하지 않는 것을 발견했다 페이지. 여기에 일이 설정되는 방법이다 : 내 코드 숨김에서 모든 컨트롤이 오류 때문에

public class MyPage : Page 
{ 
    protected void Page_Load(object sender, EventArgs args) 
    { 
    Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl' 
    } 
} 

는 불행하게도 내 프로젝트도 컴파일되지 않습니다 :

여기
<%@ Register 
    Assembly="..." 
    Namespace="..." 
    TagPrefix="custom" %> 

<custom:SomeControl ID="customControl" runat="server" /> 

같이 내 코드 뒤에 모습입니다 . 다른 컨트롤 (예 : 레이블, 패널, 텍스트 상자 등)을 클라이언트 태그로 변환하는 것은 문제가되지 않지만 사용자 정의 컨트롤에 대한 액세스 권한이 필요하기 때문에 (서버 측) 사건을 처리하고 그에 따라 대응해야한다. 기본 WebForms 물건 ...

내가 뭘 하려는지 가능한거야? 그 might 작업에 대해 생각한 또 다른 접근 방식은 컨트롤러 클래스의 서버 측 이벤트를 초기화하고 트랩하는 것입니다. 그러나,보기에서 컨트롤의 상태를 serialize하는 것을 피하고 싶습니다. 단순히 컨트롤러에 전달하고 가능한 경우 되돌릴 수 있습니까?

미리 조언 해 주셔서 감사합니다.

답변

5

신성한 허튼! 내가 이것을 게시 한 후 10 분 후에 해결책을 찾았습니다.

내 프로젝트를 마우스 오른쪽 단추로 클릭하고 "웹 응용 프로그램으로 변환"이라고 말한 다음 CodeBehind 클래스를 '부분적으로'변경했습니다. 모든 컨트롤은 이제 코드 숨김을 통해 액세스 할 수 있습니다.

독서에 감사드립니다. 내 질문/답변이 누군가 다른 사람에게 도움이되기를 바랍니다. :)

0

전통적인 WebForms에서 절반을 유지하기 위해 MVC에 무엇인가 포팅해야한다는 요지는 보이지 않습니다.

이 접근법은 이후의 모든 개발자가 두 기술에 익숙해 져야 할 필요가 있으며 내 의견으로는 깨끗하지 않다는 것을 의미합니다.

나는 둘 중 하나와 함께 가고 둘을 섞어서는 안된다.

+0

내가 사용하고있는 컨트롤은 Silverlight 버전에서 작업 중이며 언젠가는 MVC로 포팅하고 싶었습니다.이 특정 컨트롤에 대한 기능만을 보여준 작은 사이트로 시작한 것은 곧 본격적인 웹 포털과 MVC는 우리가 이전하기로 결정한 것입니다 ... – Luc

+0

전체 레거시 애플리케이션을 최신 기술로 변환하는 것이 가능하지 않으며 반복적 인 접근이 필요합니다. – Stumblor

관련 문제