tags:

views:

451

answers:

3

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 eveent (hitting a on click event in debug mode). Page postback and shows up a blank page without triggering a event.Plese 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);
}
+1  A: 

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.

devio
A: 

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.

RichardOD
A: 

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.

Paddy