2009-06-15 5 views
0

나는 page_init 도중에 동적 링크를 만들고 링크 버튼을 클릭하여 바인딩합니다. 동적 링크를 클릭하면 다시 게시 할 수 있지만 onclick 이벤트는 발생하지 않습니다. 디버그 모드). 페이지를 다시 게시하고 이벤트를 트리거하지 않고 빈 페이지를 표시합니다. 누구든지 다음 코드에서 내가 뭘 잘못하고 있는지 말할 수 있습니다. vs2005 (ASp.Net 2.0)을 사용하고 있습니다. 링크 버튼을 동적으로 생성하는 첫 번째 스위치 케이스를 참조하십시오.ASP.NET 동적 링크 버튼

public partial class ChooseRole : System.Web.UI.Page 
{ 
    public Int32 ismId; 
    public DataTable UserCredentialsDT; 
    public DataTable dsUserDetails = null; 
    public String strPage = ""; 
    protected System.Web.UI.WebControls.LinkButton lnkAdmin; 

    //protected System.Web.UI.WebControls.PlaceHolder PlaceHolderRoles; 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Session[PresentationConstant.USERCREDENTIALS] != null) 
     { 
      dsUserDetails = (DataTable)Session[PresentationConstant.USERCREDENTIALS]; 
      ismId = Convert.ToInt32(dsUserDetails.Rows[0][0].ToString()); 
     } 

     Helper.validateRoleAuthentication(PresentationConstant.PAGE_CHOOSEROLE); 
     if (!IsPostBack) 
     {    
      if (Session[PresentationConstant.USERCREDENTIALS] != null) 
      { 
       UserCredentialsDT = (DataTable)Session[PresentationConstant.USERCREDENTIALS]; 

       //Sorting the roles 
       DataView v = UserCredentialsDT.DefaultView; 
       v.Sort = "roleName"; 
       UserCredentialsDT = v.ToTable(); 

       Int32 ismId = Convert.ToInt32(UserCredentialsDT.Rows[0][0].ToString()); 

       for (int i = 0; i < UserCredentialsDT.Rows.Count; i++) 
       { 

        switch (Convert.ToInt32(UserCredentialsDT.Rows[i]["RoleId"])) 
        { 
         case (int)Helper.UserRole.Administrator: 

          //Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          //LinkButton link = new LinkButton(); 
          //{ 
          // link.Text = "Test< /br>"; 
          // link.ID = "TestButton"; 
          // link.Click += new EventHandler(TestClicked); 


          //} 
          //PlaceHolderRoles.Controls.Add(link); 
          lnkAdmin = new LinkButton(); 
          lnkAdmin.EnableViewState = true; 
          lnkAdmin.Text = "Administrator" + "<br />"; 
          lnkAdmin.ID = "lnkAdmin"; 

          this.lnkAdmin.Click += new EventHandler(this.lnkAdmin_Click); 
          this.PlaceHolderRoles.Controls.Add(lnkAdmin); 


          //lnkAdmin.Visible = true; 

          break; 


         case (int)Helper.UserRole.KeyHolder: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          String strPage; 
          LinkButton lnkSM = new LinkButton(); 
          lnkSM.EnableViewState = true; 
          lnkSM.Text = "Manager/Key Holder" + "<br />"; 
          lnkSM.ID = "lnkSM" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkSM); 
          lnkSM.Visible = true; 
          strPage = GetStoresForStoreManager_Table(ismId); 
          if (!String.IsNullOrEmpty(strPage)) 
          { 
           lnkSM.PostBackUrl = strPage; 
          } 
          break; 

         case (int)Helper.UserRole.DistrictManager: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          LinkButton lnkDM = new LinkButton(); 
          lnkDM.EnableViewState = true; 
          lnkDM.Text = "District Manager" + "<br />"; 
          lnkDM.ID = "lnkDM" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkDM); 
          lnkDM.Visible = true; 
          lnkDM.PostBackUrl = PresentationConstant.ASPX_DMREPORTS; 
          break; 

         case (int)Helper.UserRole.ARD: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          LinkButton lnkARD = new LinkButton(); 
          lnkARD.EnableViewState = true; 
          lnkARD.Text = "ARD" + "<br />"; 
          lnkARD.ID = "lnkARD" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkARD); 
          lnkARD.Visible = true; 
          lnkARD.PostBackUrl = PresentationConstant.ASPX_ARDREPORTS; 
          break; 

         case (int)Helper.UserRole.TeamAdvisor: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          LinkButton lnkTeamAdvisor = new LinkButton(); 
          lnkTeamAdvisor.EnableViewState = true; 
          lnkTeamAdvisor.Text = "Team Advisor" + "<br />"; 
          lnkTeamAdvisor.ID = "lnkTeamAdvisor" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkTeamAdvisor); 
          lnkTeamAdvisor.Visible = true; 
          lnkTeamAdvisor.PostBackUrl = PresentationConstant.ASPX_DMREPORTS; 
          break; 

         case (int)Helper.UserRole.RPC: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          LinkButton lnkRPC = new LinkButton(); 
          lnkRPC.EnableViewState = true; 
          lnkRPC.Text = "RPC" + "<br />"; 
          lnkRPC.ID = "lnkRPC" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkRPC); 
          lnkRPC.Visible = true; 
          lnkRPC.PostBackUrl = PresentationConstant.ASPX_ARDREPORTS; 
          break; 

         case (int)Helper.UserRole.RegionalManager: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          LinkButton lnkRegionalManager = new LinkButton(); 
          lnkRegionalManager.EnableViewState = true; 
          lnkRegionalManager.Text = "Regional Manager" + "<br />"; 
          lnkRegionalManager.ID = "lnkRegionalManager" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkRegionalManager); 
          lnkRegionalManager.Visible = true; 
          lnkRegionalManager.PostBackUrl = PresentationConstant.ASPX_RMREPORTS; 
          break; 

         case (int)Helper.UserRole.MerchAdmin: 
          Session[AppConstants.ROLEID] = UserCredentialsDT.Rows[i]["RoleId"]; 
          LinkButton lnkMerchAdmin = new LinkButton(); 
          lnkMerchAdmin.EnableViewState = true; 
          lnkMerchAdmin.Text = "Merch Admin" + "<br />"; 
          lnkMerchAdmin.ID = "lnkMerchAdmin" + i.ToString(); 
          PlaceHolderRoles.Controls.Add(lnkMerchAdmin); 
          lnkMerchAdmin.Visible = true; 
          lnkMerchAdmin.PostBackUrl = PresentationConstant.ASPX_MERCHANDISINGADMIN; 
          break; 

         default: 
          ClientScript.RegisterStartupScript(this.GetType(), "msg", "<script type=\"text/javascript\"> alert('Invalid Role.');</script>"); 
          break; 
        } 

       } 
      } 
     } 
    } 



    private String GetStoresForStoreManager_Table(Int32 iStoreManagerId) 
    { 
     String strDestinationPage = String.Empty; 
     String strStoreNo = String.Empty; 
     String strStoretypeId = String.Empty; 

     String strStoretype = String.Empty; 
     DataTable dtStoreDetails = null; 

     StoreBL objStoreBL = new StoreBL(); 
     dtStoreDetails = objStoreBL.GetStoresForStoreManager_Table(iStoreManagerId); 

     if (dtStoreDetails.Rows.Count != 0) 
     { 
      if (dtStoreDetails.Rows.Count > 1) 
      { 
       strDestinationPage = PresentationConstant.ASPX_CHOOSESTORE; 
      } 
      else 
      { 
       strStoreNo = dtStoreDetails.Rows[0][AppConstants.STORENO].ToString(); 
       strStoretypeId = dtStoreDetails.Rows[0][AppConstants.ID].ToString(); 
       if (dtStoreDetails.Rows[0][AppConstants.ISRETAIL].ToString().ToLower() == "true") 
       { 
        strStoretype = DBConstants.RETAIL; 
       } 
       else 
       { 
        strStoretype = DBConstants.SandR; 
       } 
       Session.Add(AppConstants.STORENO, strStoreNo); 
       Session.Add(AppConstants.STORETYPEID, strStoretypeId); 
       Session.Add(AppConstants.STORETYPE, strStoretype); 
       strDestinationPage = PresentationConstant.ASPX_STOREMAIN; 
      } 
     } 
     else 
     { 
      ClientScript.RegisterStartupScript(this.GetType(), "msg", "<script type=\"text/javascript\"> alert('You are not associated with any store.');window.location = 'SprintLogin.aspx';</script>"); 
     } 
     return strDestinationPage; 

    } 
    protected void lnkAdmin_Click(object sender, System.EventArgs e) 
    { 
     Response.Redirect(PresentationConstant.ASPX_MERCHANDISINGADMIN); 
    } 

답변

1

if (!IsPostBack) 

선은 페이지가 이렇게 ASP.Net 프레임 워크는 이벤트를 발생시킨 컨트롤을 찾을 수 없습니다, 다시 게시에 동적 버튼을 생성하지하게됩니다.

왜 ViewState 예외가 발생하지 않는지 궁금합니다.

0

나는 당신이 당신의 페이지에 linkbutton을 가지고 있고 어떤 경우에 따라 텍스트/속성을 설정하는 것이 더 좋을 것이라고 생각한다. 모든 동적 컨트롤 번거 로움을 모두 저장한다.

편집 :

죄송합니다, 당신의 foreach는 보았다 - 리피터에서 어쩌면 링크를.