0

I am creating a dynamic link during page_init even and binding onclick to a link button.On click of dynamic link is able post back but it is not raising a onclick event (hitting a on click event in debug mode). Page postback and shows up a blank page without triggering a event. Please can anyone tell what I am doing wrong in the following code. I am using vs2005(ASp.Net 2.0).Please see first switch case where I am dynamically creating a 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);
    }

3 Answers 3

1

The line

if (!IsPostBack)

will cause your page to NOT create the dynamic button in a postback, thus the ASP.Net framework will not find the control that raised the event.

I wonder why you don't get a ViewState exception, though.

Sign up to request clarification or add additional context in comments.

Comments

0

I think you should create dynamic controls in the PreInit event handler. However in this case devio's answer looks like the true cause of your issue.

Comments

0

I think you'd be better off just having the linkbutton on your page and setting the text/attribute depending on what case you're in. Saves all the dynamic control hassle altogether.

Edit:

Sorry, just saw your foreach - maybe a link in a repeater.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.