2009-06-15 6 views
0

Я создаю динамическую ссылку во время page_init и привязываюсь к кнопке ссылки. Щелчок динамической ссылки может отправлять сообщения назад, но не поднимает событие onclick (нажатие на событие click в режим отладки). Page postback и показывает пустую страницу без запуска события. Пожалуйста, кто-нибудь может сказать, что я делаю неправильно в следующем коде. Я использую 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

Я думаю, вам будет лучше, если у вас есть ссылка на вашей странице и настройка текста/атрибута в зависимости от того, в каком случае вы находитесь. Сохраняет все проблемы с динамическим контролем.

Edit:

К сожалению, только что видел ваш Еогеасп - может быть, по ссылке в ретранслятор.

Смежные вопросы