2013-09-04 2 views
0

어떻게 aspx 페이지에서 선언 한 리터럴의 개체 참조를 만들 수 있습니다. 이제 ltlContents.Text = .....으로 사용하지만 그 .Text 속성과 같은 방식으로 정적 방법으로 사용할 수 있도록 그 ltlContents에 대한 참조를 만들어야합니다.aspx에서 기존 리터럴의 개체 참조 만들기

나는 Literal ltl = ...과 같은 것을 시도했다. 그러나 프론트 엔드에서 나온 것처럼, 이것은 일반적인 객체 참조와는 다르다.

UPDATE : 나는 ltlContents이 같은 정적 메서드에서 객체를 사용하려면 : ltlContents.Text = valueFromSomeFunction하지만 컴파일러는 나에게 다음과 같은 오류를 제공합니다 : An object reference is required for the non-static field, method, or property _Default.ltlContents.

+0

'ltlContents'는 이미 코드 숨김의 개체입니다. 어떤 문제가 특별히 보이십니까? –

+0

@AdrianWragg - 내 게시물을 업데이트했습니다. – Syspect

답변

2

이 컨트롤이있는 컨트롤이나 페이지에 대한 참조가 필요합니다.이 페이지는 실제 수명주기 동안 실행 중이어야합니다. 예를 들어 웹 메서드에서 컨트롤에 액세스 할 수 없습니다.

public static void SetControlText(string controlID, string text) 
{ 
    Page page = HttpContext.Current.Handler as Page; 
    if (page != null) 
    { 
     Control ctrl = FindControlRecursive(page, controlID); 
     if(ctrl != null) 
     { 
      ITextControl txt = ctrl as ITextControl; 
      if(txt != null) 
       txt.Text = text; 
     } 
    } 
} 

public static Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) return root; 
    foreach (Control c in root.Controls) 
    { 
     Control t = FindControlRecursive(c, id); 
     if (t != null) return t; 
    } 
    return null; 
} 

을 지금이 페이지의 lifefycle 동안 모든 곳에서 작동합니다 :

SetControlText("ltlContents", "Hello world"); 

그러나, 당신은 당신이 원하는 것 같다 정적 메서드에서조차이 컨트롤에 액세스 할 수 있습니다

0

모든 요청에 ​​대해 페이지의 새 개체가 응답 (HTML)으로 제공됩니다. 이렇게 할 수 없습니다.
함수 대신에 literal을 사용하는 대신 함수에서 값을 반환하고 사용하십시오. 또는 리터럴의 값을 사용하여 기능을 수행하십시오.