2012-04-16 4 views
4

현재 사용자의 전체 이름에 액세스해야하는 ASCX 사용자 정의 컨트롤이 있다고 가정 해 봅니다.ASP.NET ASCX 인스턴스 변수 사용

<custom:top runat="server" /> 

영문 파일이 현재 사용자의 사용자 ID를 알고 자신의 이름을 결정할 수 :는 ASPX 페이지 상단

<%@ Register src="top.ascx" tagprefix="custom" tagname="top" %> 

에서이 라인과 몸이 라인이 포함되어 있습니다. 그렇다면 ASCX 파일에 정보를 제공하기 위해 ASPX 파일에 의해 실행되는 코드를 어떻게 사용할 수 있습니까?

답변

4

사용자 정의 컨트롤의 Page property을 사용하여 페이지의 인스턴스로 캐스팅 할 수 있습니다. 그런 다음 페이지 클래스의 메서드를 호출하여 사용자 이름을 가져옵니다.

이 작업을 동적으로 컴파일 된 프로젝트에서 수행하려면 컨트롤에서 동적으로 컴파일 된 페이지의 데이터 형식을 인식하도록해야합니다. Here is a short tutorial on how to do.

또는 Brandon outlines으로, 반대쪽을 수행하고 페이지가 사용자에게 정보를 제어하도록합니다.

+1

귀하의 첫 번째 단락의 대답은 나를 위해 최선을 다했다. 나는 이미 이것을 시도했다고 생각했다. Brandon의 솔루션은 정말로 차갑지 만 더 많은 작업을 필요로하는 반면, 훌륭하게 작동하고 구현하기는 쉽지 않았습니다. 감사! – user1325179

6

UserControl에서 속성을 선언하고 상위 페이지를 설정하십시오. 당신의 UserControl을에

: 당신이 잘못 될 수처럼 영문 페이지에서

public string FullName { get; set; } 

중 하나

YourUserControl.FullName = FullName 

뒤에 또는 마크 업을 통해 코드에서 설정이

<custom:top runat="server" FullName="<%= SomeProperty %>" /> 
+1

Brandon! 이것은 분명히 유용 할 수 있습니다. – user1325179

0

이 소리 페이지 라이프 사이클의 작동 방식 및 컨트롤 전반에 데이터를 노출하는 방법에 대해 알아보십시오.

당신의 ASPX 파일에서
public override void OnLoad(EventArgs e) 
    { 
     string userName = "Bob"; 
    } 

, 당신이 컨트롤을 참조와 함께 데이터를 전달하는 데에 속성을 설정할 수 있습니다 : 예를 들어, 당신이 당신의 ASPX이 코드가 있다고 할 수 있습니다

<custom:top ID="someControl" runat="server" /> 

을 당신 지금처럼 top 컨트롤의 속성을 노출 :

public string UserName { get; set; } 

당신은 다음 OnLoad 방법이 코드를 추가 할 수 있습니다

someControl.UserName = userName; 

그러면 컨트롤에서 해당 데이터에 액세스 할 수 있습니다.

string fromCache = HttpContext.Current.Items["key"]; 
0

당신은 할 수 : 같은 방식을 통해 컨트롤에서 데이터를 가져 오는 다음

HttpContext.Current.Items["key"] = userName; 

그리고 : 또는, 당신은 당신이 컨트롤에 직접 라인을 해달라고 요청 캐시에 물건을 스틱 수 여러 가지 방법으로이 문제에 대해 알아보십시오. 사용자는 세션에 바인딩되므로 일반적으로 세션 변수를 사용합니다.영문 (또는 사용자가 로그인 할 때)에서

:

Session["UserFullName"] = GetFullName(); //Code to get full name here 

ASMX에서는 :

this.FullName = Session["UserFullName"]; //TODO: Check for null values