2009-06-15 14 views
0

Ich erstelle einen dynamischen Link während page_init even und binding onclick auf einen Link button.On click von dynamic link ist in der Lage zurück zu posten, aber es wird kein onclick Event ausgelöst (trifft auf ein on click Event in Debug-Modus). Seitenpostback und zeigt eine leere Seite an, ohne ein Ereignis auszulösen. Bitte sagen Sie mir im folgenden Code, was ich falsch mache. Ich benutze vs2005 (ASp.Net 2.0). Bitte sehen Sie den ersten Schalter Fall, wo ich dynamisch eine Link-Schaltfläche erstellen.ASP.NET Dynamischer Link Button

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); 
    } 

Antwort

1

Die Linie

if (!IsPostBack) 

wird dazu führen, dass die dynamische Seite Taste in einem Postbacks nicht erstellen, damit der ASP.Net Rahmen wird die Kontrolle nicht finden, die das Ereignis ausgelöst hat.

Ich frage mich, warum Sie eine ViewState Ausnahme nicht erhalten.

0

Ich denke, du wärst besser dran, wenn du den Linkbutton auf deiner Seite hast und den Text/das Attribut je nachdem, in welchem ​​Fall du dich befindest. Speichert den gesamten dynamischen Kontrollstress.

Edit:

Sorry, sah nur Ihre foreach - vielleicht einen Link in einem Repeater.

Verwandte Themen