2012-11-12 3 views
0

저는 ASP .Net 프로그래밍의 초보자입니다.
나는 약간의 훈련 웹 응용 프로그램을 개발 중이다.
사용자가 장바구니에 항목을 추가 할 수있는 웹 양식을 개발했습니다.
사용자의 카트가 세션 변수와 일치합니다.동적 HtmlInputSubmit 컨트롤의 ServerClick 이벤트 처리

Page_PreRender 이벤트 처리기에서 사용자의 장바구니가 비어 있는지 확인합니다.
장바구니가 비어 있지 않으면 테이블이 양식에 삽입됩니다.
카트의 각 항목이 표의 한 줄과 일치합니다.
항목 줄에는 카트에서 항목을 제거하는 HtmlInputSubmit이 포함되어 있습니다. 여기

내가 동적으로 "항목 제거"HtmlInputSubmit을 만들 작성한 코드입니다 :

submitSupprimerArt = new HtmlInputSubmit(); 
cellTblCaddie.Controls.Add(submitSupprimerArt); 

submitSupprimerArt.Value = "Supprimer " + article.Id; 
submitSupprimerArt.Attributes.Add("articleId", article.Id); 
submitSupprimerArt.ServerClick += new EventHandler(submitSupprimerArt_Click); 

사용자가 다음 포스트 백이 만들어 HtmlInputSubmit하지만 submitSupprimerArt_Click 이벤트 핸들러가 호출되지를 클릭합니다.
누군가 내게 이유를 제공 할 수 있습니까?

답변

0

나는 마침내 훈련 응용 프로그램의 해결책을 살펴 보았습니다.
문제점을 해결하는 데 필요한 작업을 설명 할 수 있지만 작업을 수행해야하는 이유를 정확하게 설명 할 수는 없습니다.

트릭은 ASPX 페이지에서 PlaceHolder 컨트롤을 선언하는 것입니다.
다음과 같이 자리 Page_Load 이벤트 처리기에서 "제거 항목"버튼을 가득해야 : 플레이스 홀더의

protected void Page_Load(object sender, EventArgs e) 
{ 
    // ... 

    caddie = (ListeArticles)this.Session["caddie"]; 
    if (caddie != null) 
    { 
     foreach (Article article in caddie) 
     { 
      btnSupprimerArt = new Button(); 
      this.phBoutonsSupprArt.Controls.Add(btnSupprimerArt); 

      btnSupprimerArt.ID = "btnSupprimerArt" + article.Id; 
      btnSupprimerArt.Command += new CommandEventHandler(btnSupprimerArt_Command); 
      btnSupprimerArt.CommandName = article.Id; 
      btnSupprimerArt.Text = "Supprimer " + article.Id; 
     } 
    } 
} 

컨트롤 속성이 Page_PreRender 이벤트 핸들러에서 지워집니다.
그런 다음 "Remove Item"단추가 Page_PreRender 이벤트 처리기에서 만들어집니다.
"항목 제거"버튼이 이번에는 표 셀에 삽입됩니다.

결론 (개정 아마 필요) : 동적 제어 이벤트에
등록 핸들러가 조금 까다로운 것 같다.
모든 이벤트 처리기는 Page_Load 이벤트 다음에 등록되어야합니다.

관련 문제