문제

내가 만들고있는 "기본"객체의 유형을 얻고 싶습니다. 모든 페이지 객체는 Basepage를 기반으로합니다. 예를 들어, 로그인 .aspx와 코드-비인드와 메소드 디스플레이가있는 클래스가 있습니다.

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(page.GetType());
}

내 프로젝트 구조에는 기본 리소스 파일과 psuedo-translation 리소스 파일이 있습니다. 내가 설정하면 다음과 같이 시도해보십시오.

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(typeof(Login));
}

번역 된 페이지를 반환합니다. 일부 연구 후 Page.getType (). toString ()이 "asp_login.aspx"의 효과에 대해 무언가를 반환 한 것을 발견했습니다. "Basepage"에서 파생 되었습니까?

미리 감사드립니다!

도움이 되었습니까?

해결책

코드 베인드가 다음과 같이 보이는 경우

public partial class _Login : BasePage 
 { /* ... */ 
 }

그러면 당신은 얻을 것입니다 Type 그것에 대한 객체 typeof(_Login). 유형을 동적으로 얻으려면 재귀 적으로 찾을 수 있습니다.

Type GetCodeBehindType()
 { return getCodeBehindTypeRecursive(this.GetType());
 }

Type getCodeBehindTypeRecursive(Type t)
 { var baseType = t.BaseType;
   if (baseType == typeof(BasePage)) return t;
   else return getCodeBehindTypeRecursive(baseType);
 }

다른 팁

추가 연구 후에 Page.getType (). BaseType에 전화하면 ASPX 페이지의 코드-비만 유형을 반환합니다.

page.getType (). BaseType, 이전에 언급되었지만 이유에 대해 자세히 설명하겠습니다.

ASPX 페이지는 코드-비만 페이지에서 상속됩니다. 즉, 상속 계층이 다음과 같습니다.

...
Page
BasePage
Login
ASP_Login

상단은 부모이고 맨 아래는 아이입니다.

이를 통해 실제 ASPX 페이지와 관련된 생성 된 모든 코드를 기본 클래스 페이지에 복사 할 필요없이 ASPX 페이지에서 뒤에있는 코드에 액세스 할 수 있습니다.

그것은 당신이 어디에서 Display ()를 호출하는 곳에 따라 다릅니다. ASPX에서 호출하는 경우 "ASP_LOGIN.ASPX"가됩니다. Code-Behind (예 : page_load () 메소드)에서 호출하는 경우 로그인 페이지 유형을 가져와야합니다.

페이지를 전달하는 대신 페이지 속성 (예 : this.page.gettype ())를 사용하는 것만으로도 올바르게 기억하면 현재 페이지/코드 비유 유형이어야합니다.

또한 이런 종류의 물건을 ASPX/CodeBehind에서 어떤 종류의 서비스로 옮기는 것을 고려할 수 있다는 점을 지적해야합니다. 일반적으로 코드에서 수행하는 일의 양을 최소화하고 대신에 로직을 발표자 클래스로 푸시하고 ASP.NET 웹 양식 개발의 MVP 패턴을 따라가는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top