MVC 프로젝트의 코드 비유에서 서버 측 제어에 액세스하려면 어떻게해야합니까?
-
06-07-2019 - |
문제
가장 먼저, 내 견해에서 서버 측 제어에 액세스하는 것이 MVC에서 눈살을 찌푸 렸음을 알 수 있습니다. 그러나 나는 내 상황에 있어야한다 (내가 볼 수있는 한). 여기 내 이야기가 있습니다. :)
웹 애플리케이션에서 사용하는 타사 컨트롤이 있습니다. 현재 WebForms 솔루션을 MVC로 포트하는 작업을 받았습니다. 이 특정 타사 웹 컨트롤에는 WebForms 아키텍처가 필요하므로 WebForms 프로젝트에서 동일한 코드를 사용하려고합니다.
나의 초기 접근 두 개의 웹 사이트 (WebForms 사이트 및 MVC 사이트)가있는 다음 MVC 측에서 Iframes를 사용하여 두 개의 웹 사이트를 연결하는 것이 었습니다. 그것이 효과가 있다는 것을 알고 있지만,이 특정 제어를 사용하는 것은 약간의 과장이었습니다. 더 많은 연구를 한 후에, i 발견 "소년을 혼합"하고 MVC 프로젝트 내에서 웹 포름 아키텍처를 사용할 수 있습니다. 따라서 내가 취한 새로운 접근법은 뿐 이 제 3 자 컨트롤을 사용하는 페이지를 특정 디렉토리 (예 : 'view somedir webforms')로 복사 한 다음 mvc 라우팅 시스템이 선택하지 않도록 내 Global.asax 파일의 디렉토리를 무시하십시오.
routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}");
불행히도 ASPX 페이지를 MVC 프로젝트에 복사했을 때 CodeBehind가 페이지의 제어에 대한 액세스 권한을 부여하지 않는다는 것을 알게되었습니다. 상황이 설정되는 방법은 다음과 같습니다.
<%@ Register
Assembly="..."
Namespace="..."
TagPrefix="custom" %>
<custom:SomeControl ID="customControl" runat="server" />
다음은 다음과 같습니다.
public class MyPage : Page
{
protected void Page_Load(object sender, EventArgs args)
{
Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl'
}
}
불행히도 내 코드의 모든 컨트롤 에서이 오류가 발생하기 때문에 내 프로젝트는 컴파일되지 않습니다. 다른 컨트롤 (예 : 레이블, 패널, 텍스트 상자 등)을 클라이언트 태그로 변환하는 것은 문제가되지 않지만 내 코드 에서이 사용자 정의 컨트롤에 액세스 할 수 있도록 (Server-Side를들을 수 있도록해야합니다. ) 이벤트 및 그에 따라 응답; 기본 웹 폼 스팅 ...
내가하려는 일이 가능합니까? 내가 그것에 대해 생각한 또 다른 접근법 might
작업은 컨트롤러 클래스에서 서버 측 이벤트를 초기화하고 덫을 놓는 것입니다. 그러나 뷰에서 컨트롤 상태를 직렬화하지 않고 단순히 컨트롤러로 전달하고 가능하면 다시 전달하고 싶습니까?
조언에 미리 감사드립니다!
해결책
이런 세상에!! 이것을 게시 한 후 10 분 후에 솔루션을 찾았습니다.
수정 사항은 내 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "웹 응용 프로그램으로 변환"하고 CodeBehind 클래스를 '부분'으로 다시 변경하는 것이 었습니다. 내 모든 컨트롤은 이제 뒤의 코드를 통해 액세스 할 수 있습니다.
읽어 주셔서 감사합니다. 제 질문/답변이 언젠가 다른 사람에게 도움이되기를 바랍니다. :)
다른 팁
나는 전통적인 웹 포름에 절반을 유지하기 위해 MVC에 무언가를 포팅하는 요점을 보지 못합니다.
이 접근법은 미래의 개발자가 두 기술에 익숙해야하며 제 생각에는 깨끗하지 않다는 것을 의미합니다.
나는 하나 또는 다른 하나와 함께 가서 두 가지를 섞지 않으려 고 노력할 것입니다.