2016-07-11 1 views
1

ASP.NET 팝업을 사용하여 항목을 동적으로 추가하는 Listbox가 있습니다 (세션을 사용하여 포스트 백간에 목록 저장). 항목이 목록 상자에 추가되면 내가 새로 만들 수있는 단추의 색을 변경하기 위해 클릭 할 수있는 ImageButton을 추가하려고합니다. Page_Init에서 컨트롤을 추가하는 것과 같이 뭔가 다르게해야한다는 것을 알고 있지만 버튼 추가 이벤트 (cmdAdd_Click)는 아직 사라지지 않았습니다. 나는 그것을 깔끔하고 단순한 방법으로 이해하는 것처럼 보일 수 없다.클릭 이벤트 중 클릭 가능한 컨트롤 추가 ASP.NET

에서 .aspx은 니펫을 :

<asp:Button ID="cmdAdd" runat="server" OnClick="cmdAdd_Click" /> 
<asp:ListBox ID="lboObjects" runat="server"></asp:ListBox> 
<asp:Panel ID="pnlButtons" runat="server"></asp:Panel> 

.cs 코드 스 니펫 뒤에 :

protected void cmdAdd_Click(object sender, ImageClickEventArgs e) 
{ 
    // Simplified for Brevity 
    ((List<Line>)Session["lstObjects"]).Add("Unique Object"); // the object will be unique. 
    lboObjects.DataSource = ((List<Line>)Session["lstObjects"]); 
    lboObjects.DataBind(); 

    // Clear out b/c I intend on having a cmdRemove_Click, but not showing for simplicity 
    pnlButtons.Controls.Clear(); 

    foreach (object obj in ((List<Line>)Session["lstObjects"])) 
    { 
     ImageButton imageButton = new ImageButton(); 

     imageButton.ID = obj.ToString(); 
     imageButton.Click += cmdChangeColor_Click; 
     pnlButtons.Controls.Add(imageButton); 
    } 
} 

protected void cmdChangeColor_Click(object sender, ImageClickEventArgs e) 
{........} 

답변

0

당신은 후 Page_Init 내부 컨트롤을로드 할. 그렇지 않으면 컨트롤 트리에 없기 때문에 cmdChangeColor_Click 이벤트를 트리거 할 수 없습니다. 제공되는 예에서 예를 들어

,

protected void Page_Init(object sender, EventArgs e) 
{ 
    var list = Session["lstObjects"] as List<Line>; 
    if (list != null) 
    { 
     foreach (var obj in list) 
     { 
      ImageButton imageButton = new ImageButton {ID = obj.ToString()}; 
      imageButton.Click += cmdChangeColor_Click; 
      pnlButtons.Controls.Add(imageButton); 
     } 
    } 
} 
+0

, 어떻게 내가 cmdAdd_Click 이벤트를 실행 한 후 후 Page_Init 일이 어떻게해야합니까? 어떻게 든 목록을 추가 한 다음 다른 Page_Init을 처리하기 위해 다른 Postback을 보냅니 까? –

+0

아무 것도 할 필요가 없습니다. Page_Init은 Page_Load 이전부터 실행됩니다. 아이디어는 동적으로 생성 된 컨트롤을 제어 트리에로드하는 것입니다. 컨트롤 목록을 구현하기 전에 단일 컨트롤로 시작하십시오. 예제 [here] (http://stackoverflow.com/a/37882531/296861)를 읽을 수 있습니다. – Win

관련 문제