2010-03-02 4 views
1

Visual Studio에서 사용자 지정 컨트롤이 있고 디자인 모드에서 Visual Studio의 현재 열린 페이지에 어떻게 든 액세스 할 수 있어야합니다. 사용자 지정 컨트롤의 Page 속성을 보면 ID에 "__Page"라고 표시되고 대부분의 속성에 액세스 할 수 없으므로별로 도움이되지 않습니다. 누구든지 프로젝트에서 현재 열려있는 페이지의 파일 이름을 얻는 방법이있는 서비스 또는 인터페이스를 알고 있습니까? 감사.Visual Studio.NET에서 사용자 지정 컨트롤로 현재 열어 놓은 ASP 페이지 파일 이름을 가져올 수 있습니까?

+2

왜 컨트롤이 페이지에 대해 알 필요가 있습니까? – adam0101

답변

1

할 수 있습니다. 여기를 참조하십시오 : http://weblogs.asp.net/gunnarpeipman/archive/2008/05/21/using-parent-page-properties-in-user-control.aspx

을하지만, 심지어이 페이지

이 상황을 말하여 시작하는 경고 표지판입니다 - 사용자 컨트롤 부모를 알아야 할 경우 UI 구조에 문제가 있습니다.

페이지에 대한 정보를 알고 싶다면 페이지에서 설정할 수있는 컨트롤을 만드는 것이 좋습니다. 그런 다음 컨트롤 내에서 속성 값을 확인할 수 있습니다.

예를 들어 실제로 페이지 이름을 알아야하는 경우 컨트롤에 "PageName"이라는 속성이 있어야하며 페이지에 광고 할 때 속성을 명시 적으로 설정할 수 있습니다. (나는 원한다면 예를 들고 올 것이다.)

다음은 예를 들어보고 페이지의 날짜 - 시간 선택기 컨트롤입니다. 텍스트 상자에 연결된 FromDate라는 속성이 있습니다.

public DateTime FromDate 
{ 
    get 
    { 
     return Convert.ToDateTime(txtFrom.Text); 
    } 
    set 
    { 
     txtFrom.Text = value.ToString(); 
    } 
} 

그런 다음 당신은이 같은 그는 페이지를 int로 설정합니다 :

<uc1:DateRangeControl ID="DateRangeControl1" runat="server" 
       FromDate="1/1/2009" /> 

우리가 설계 결함 말할 이유는 좋은 OO 디자인은 자연에 의해 제어가 작동 할 수 있어야한다고 말할 것이다 어떤 컨테이너가 들어 있는지 모른 채

+0

감사합니다. David +1. 나는 너와 확실히 동의하지만 이것은 내가 겪은 일이 아니다. 이러한 사용자 지정 서버 컨트롤로 작업하고있는 최종 결과는 컨테이너 나 그와 같은 것에 대한 종속성을 발생시키지 않습니다. 나는 현재 페이지 객체를 포함하고있는 파일 이름을 보여주는 런타임 컨텍스트에 의해 생성 된 몇 가지 속성과 동등한 것을 찾고있다. 예를 들어 AppRelativeVirtualPath 속성은 Page의 TemplateControl입니다. 요청 및 리플렉션을 통해 몇 개의 다른 페이지에서 찾을 수 있지만 디자인 타임 중에는 이러한 속성이 모두 null입니다. – Nate

0

왜이 정보는 디자인 타임에 필요합니까? 디자인 모드에서 올바르게 표시되는 데 문제가있는 경우 DesignMode 속성을 확인하고 런타임에 페이지 종속 논리 만 실행할 수 있습니까?

+0

아니요 런타임에 페이지 파일 이름 정보가 필요하지 않습니다.개발자 편의를 위해 서버 컨트롤에 대한 일부 사용자 지정 편집기에서 페이지 파일 이름 정보를 사용하고 싶습니다. 컨트롤에 대한 종속성을 생성하지 않습니다. – Nate

0

이 작업을 수행해야한다면 UI 디자인에 문제가 있다는 것에 동의합니다. 그러나, 나는 그것을 때때로 발견했다.

는 사용자 지정 컨트롤을 가정하면 WebControl 또는 그 서브 클래스 중 하나를 확장하고 페이지 안에 :와

string myPageName = System.IO.Path.GetFileName(this.Page.Request.Path); 

쉽습니다.

관련 문제