2011-05-11 6 views
0

사용자 정의 UserControl (asp:Literal 및 일부 문자열 속성 만 포함) 및 버튼이있는 페이지가 있다고 가정 해 보겠습니다. 이제 버튼 클릭시 리터럴 텍스트를 변경하려고합니다. 버튼 클릭 이벤트에서 컨트롤의 문자열 속성을 변경합니다. 이처럼 :포스트 백에서 UserControl의 속성을 변경하는 방법?

//in aspx 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    testControl.Text = "triggered"; 
} 

문제는 내 리터럴 때문에 Page_Load 이벤트가 발생 첫째 변하지 내 사용자 지정 컨트롤을 생성 한 후 Button_Clicked 화재 및 속성을 변경하지만 컨트롤이 이미 생성 될 때, 그것은 아무것도하지 않는 것입니다. 내가 속성 setter에 Page_Load에서 사용자 지정 컨트롤의 모든 논리를 이동하는 경우 의도 한 것처럼 변경됩니다 파악

public partial class TestControl : System.Web.UI.UserControl 
{ 
    public string Text { get; set; } } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     lblTest.Text = Text; 
    } 
} 

:이 뒤에 내 컨트롤의 코드입니다. 좋아요 :

public string Text { get { return lblTest.Text; } set { lblTest.Text = value; } } 

다른 방법이 있습니까? 내 실제 문제는 여기에 설명 된 것보다 훨씬 복잡한 컨트롤을 포함하지만 문제는 동일하게 유지됩니다. 모든 포스트 백에서 이벤트 핸들러에 설정된 모든 속성은 무시됩니다.

답변

3

Page_LoadPage_PreRender까지 모든 논리를 이동 문제를 해결했다. 이제 특성은 논리가 실행되기 전에 설정됩니다. 더 나은 해결책이 있는지 그리고 Page_PreRender을 사용하는 데있어 단점이 있는지를 확인하기 위해 다른 대답을 기다릴 것입니다.

+0

나에게 좋은 생각이 들리네. – tjrobinson

0

이 동영상은 도움이 될 수 있습니다 : How Do I: Persist the State of a User Control During a Postback

+0

그건 내 생각에 정확히는 아니야. 문제는 다시 게시하는 동안 속성을 변경하여 속성을 사용하는 것이 었습니다. 그런데 포스트 백간에 데이터를 유지하려면 일반적으로 다음과 같이 사용합니다. public string Text {return {string() {Text "];} set {ViewState ["Text "] = value; }'. 그것은 기본 속성에 대한 확인 작동하는 것,하지만 모든 경우에 잘 모르겠습니다;). – Episodex

관련 문제