우선, 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하는 것을 피하고 싶습니다. 단순히 컨트롤러에 전달하고 가능한 경우 되돌릴 수 있습니까?
미리 조언 해 주셔서 감사합니다.
내가 사용하고있는 컨트롤은 Silverlight 버전에서 작업 중이며 언젠가는 MVC로 포팅하고 싶었습니다.이 특정 컨트롤에 대한 기능만을 보여준 작은 사이트로 시작한 것은 곧 본격적인 웹 포털과 MVC는 우리가 이전하기로 결정한 것입니다 ... – Luc
전체 레거시 애플리케이션을 최신 기술로 변환하는 것이 가능하지 않으며 반복적 인 접근이 필요합니다. – Stumblor