우선, 내 질문에 중복이있을 수는 있지만 죄송합니다. 너무 많이 검색하면 솔루션을 찾을 수 없습니다. Scenerio는 UserControl입니다. 지정된 목록의 개수가 0보다 많으면이 사용자 정의 컨트롤이 동적으로 ListBox를 만듭니다. 컨트롤이 동적으로 추가되고 추가하는 데 문제가 없지만 이벤트 처리기가 추가되지 않습니다. 첫 번째 listBox에서 항목을 선택하면 secondListBox가 동적으로 추가되고 항목도 동적으로 추가됩니다. 첫 번째 listBox가 나타나지만 selectedIndexChanged 이벤트 핸들러가 작동하지 않습니다. 내 코드의 문제점은 무엇입니까?동적으로 추가 된 ListBox의 EventHandler가 ASP.Net에서 실행되지 않습니다
편집 : 나는
li.Attributes.Add("onselectedindexchanged","selectedIndexChanged");
또는
li.AutoPostBack = true;
하지만 여전히 발사하지
...private List<string> myList = new List<string>() { "Serkan", "Kadir" };
private List<string> mySecondList = new List<string>() { "Istanbul", "Ankara" };
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (myList.Count > 0)
{
ListBox li = new ListBox();
li.ID = Guid.NewGuid().ToString();
li.SelectedIndexChanged += new EventHandler(this.selectedIndexChanged);
foreach (string item in myList)
{
li.Items.Add(item);
}
this.Controls.Add(li);
}
}
}
private void selectedIndexChanged(object sender, EventArgs e)
{
ListBox li2 = new ListBox();
li2.ID = Guid.NewGuid().ToString();
foreach (string item in mySecondList)
{
li2.Items.Add(item);
}
this.Controls.Add(li2);
}
당신은 모든 것을 놓치고 있습니다. 이러한 컨트롤은 수동으로 추가됩니다. 제 질문을주의 깊게 읽으십시오. 컨트롤이 동적으로 추가됩니다 (N 번호 목록 상자가 있음을 의미 함). 이벤트 처리기도 추가됩니다. 수동으로 추가하고 가시성을 변경합니다. 미안 해요,하지만 이건 내 질문의 대답이 아니에요. –
죄송합니다. 내가 만들고자하는 것은 Controls 컬렉션이 Page의 특정 인스턴스에 속해 있다는 것입니다. 서버에서 페이지를 요청할 때마다 새로운 인스턴스가 생성됩니다. 즉, 더 이상 존재하지 않는 이전에 생성 된 페이지 인스턴스에 추가 한 컨트롤에 대해 아무것도 알지 못합니다. – RichardW1001
ASP.net은 HTML을 생성하고 HTML은 "가시성"을 갖지 않습니다. 그 방법을 제안한 이유는 귀하의 방법과 정확히 동일한 HTML 마크 업을 생성하지만 포스트 백에서 작동한다는 것입니다. visible = false는 ASP.net이 HTML을 렌더링하지 않도록 지시합니다. 중요한 차이점은 컨트롤이 Page/UserControl의 모든 인스턴스에 등록되므로 이벤트 등에서 사용할 수 있다는 점입니다. 추가하는 컨트롤은 이전 인스턴스에 존재하기 때문에 포스트 백에서 작동하지 않습니다. 더 이상 존재하지 않다. BTW 원래 질문에 수준의 변수 번호를 언급하지 않습니다. – RichardW1001