2010-07-07 3 views
0

자리 표시 자 및 버튼이있는 asp.net 페이지가 있습니다. 버튼을 클릭 한 후 여러 개의 LinkButton이 제 자리 표시 자에 나타나기를 원하며, 특정 LinkButton의 click_event에 연결되도록 specyfic 핸들러를 원합니다.asp.net dynamic linkButtons 클릭 이벤트 문제

protected void Button_Click(object sender, EventArgs e) 

{ 

for(...) 
    { 

    LinkButton l = new LinkButton(); 

    l.ID = "link" + i; 

    l.Command += new CommandEventHandler(link_Command); 

    PlaceHolder1.Controls.Add(l); 

} 

} 

void link_Command(object sender, CommandEventArgs e) 

     { 
      PlaceHolder1.Controls.Clear(); 
      Label l = new Label(); 
      l.Text = e.CommandArgument.ToString(); 
      PlaceHolder1.Controls.Add(l); 
     } 

LinkButtons는 볼 수 있지만, 그 이벤트가 발생하지 않습니다 여기에

는 코드입니다. 어떻게 해결해야합니까? Button_Click 이벤트 내에 LinkButton을 생성해야하는데, 그 이유는 생성 할 버튼의 수를 알 수 있기 때문입니다. 도와주세요.

답변

1

프로그래밍 초창기에 처음으로 직면했던 문제 중 하나는 저에게 당시를 ​​생각 나게합니다 .... ASP를 동적으로 생성/삽입하려고했기 때문에 ASP.Net은 ControlState와 ViewState를 사용하여 검색합니다 포스트 백 이후에 페이지에 배치 한 모든 컨트롤의 상태. 귀하의 경우에는 실제로 당신이 만든 모든 LinkButton에 대한 ControlState/ViewState가 정의되어 있습니다.

이 문제를 해결하는 쉬운 방법은 일부 데이터 컨트롤 eg.Repeater/GridView를 사용하는 것일 수 있다고 생각합니다. ViewState가 원활하게 처리됩니다.

그리고 다른 방법은 제어 상태 (조금 복잡함)를 탐색하고 읽는 것입니다.

Reagards,

1

문제는 당신이 페이지의 초기 렌더링 (사용자가 버튼을 클릭 할 때)에 LinkButtons를 추가,하지만 다시 게시 할 때, 그들은 다시 생성되지 않은 것입니다, 따라서 클릭 이벤트를 바인딩 할 페이지는 없습니다. 다시 게시하는 경우 Page_Load 메서드에서 다시 만들어야합니다. 따라서 ViewState에서 LinkButton을 만드는 방법을 결정할 때 사용한 정보 중 일부를 저장해야하므로 Page_Load에서 다시 만들 수 있습니다. 이렇게하면 컨트롤이 페이지에서 이벤트를 바인딩 할 수있게되며 처리기가 호출됩니다.

+0

ViewStat을 사용하면 많은 도움이됩니다. 감사합니다. 다른 문제가 있습니다. UpdatePanel에 PlaceHolder가 있고 asyncPostback에 해당 LinkButton을 추가하고 싶습니다. Page_Load (링크를 다시 생성 한 곳)를 호출해야합니까? 그렇지 않다면 어디에서 링크를 다시 만들고 Click_handler를 추가 할 수 있습니까? – Richmond

+0

편집 : 나는 모든 게시물에 Page_Load가 호출된다는 것을 알았습니다. 하지만 내 placeHolder (UpdatePanel 내부)에서이 코드가 작동하지 않는 부분 포스트 백을 수행하는 이유는 무엇입니까? 문자열 cos = (문자열) ViewState [ "cos"]; 레이블 l2 = 새 레이블(); l2.Text = "<"+ cos + ">"; PlaceHolder1.Controls.Add (l2); ViewState.Clear(); – Richmond

+0

다른 질문 일 수 있습니까? LinkButton 대신 여기에 레이블을 추가합니다. 코드의 어느 부분이 작동하지 않습니까? 추가되지 않습니까? –

1

생성 된 링크 버튼을 클릭하면 페이지가 다시 게시됩니다. 모든 포스트 백에서 링크 버튼을 다시 만들고 이벤트 핸들러를 다시 바인딩해야합니다.