Monday, April 11, 2011

ASP.NET AJAX issues when using UserControls

Hi Stackoverflowers

I Have a UserControl called TenantList.ascx which contains a slightly modified GridView from DevExpress (Web.ASPxGridView). This control makes Callbacks without causing a postback which is exactly what I need. The specific event I need to react on is CustomButtonClicked. I have made my on OnCustomButtonClicked event on the usercontrol TenantList.ascx that fires when the the GridView CustomButtonClicked event fires.

I have an eventhandler on the page where I use the UC. When I debug using VS I can see that I get into the eventhandler as I am suppose to. My Eventhandler looks like this:

    protected void uc_TenantList_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
    {
        Tenant tenant = (Tenant)uc_TenantList.GetGridView().GetRow(e.VisibleIndex);

        switch (e.ButtonID)
        {
            case "btn_show":
                ShowRow(tenant);
                break;
            case "btn_edit":
                EditRow(tenant);
                break;
            case "btn_delete":
                DeleteRow(tenant.Id);
                break;
            default:
                break;
        } 
    }

    private void EditRow(Tenant tenant)
    {
        uc_TenantDetails.SetTenantData(cBLL.GetTenant(tenant.Id));
        UpdatePanel1.Update();
    }

The EditRow function get's called and the UserControl TenantDetails.ascx gets filled with data correctly. However the UpdatePanel1.Update(); is not updating the panel where my TenantDetails UserControl is in.

However if i call UpdatePanel1.Update(); from a normal control registered to the ScriptManager it updates just fine.

        protected void Button1_Click(object sender, EventArgs e)
        {
            uc_TenantDetails.SetTenantData(cBLL.GetTenant(17));
            UpdatePanel1.Update();
        }

That works without a problem... I am 100% stuck and without any idea of what might be the problem here.

Any suggestion is welcome!!

Cheers The Real Napster - In real trouble :)

From stackoverflow
  • Make sure that your update panel is set to always update (not conditionally). You may also find the information in this articles useful:

    http://www.asp.net/AJAX/Documentation/Live/overview/PartialPageRenderingOverview.aspx http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.update.aspx

    The first link will give you some history regarding Partial Page Rendering, the second gives you some more information about the Update method.

    From the documentation calling UpdatePanel.Update will cause an update panel to be re-rendered on the client after calling, but only if the UpdatePanel is set to Conditionally update. If it is set to always update this should throw an error.

    If your update panel is set to always update, could it be that it is nested in another UpdatePanel which has its update mode set to conditional?

    The real napster : I have had it set to Always instead of conditionally and it makes no difference. I use the Update(); function instead of "Always". "I would say it sounds like partial-page rendering is enabled." I want only to render the Updatepanel shouldn't it be on then?
    Chris : Sorry, will flesh out the answer - the link I posted says you will also need to make a modification on the script manager
  • Okay solved this issue

    What I needed to do was to enable postback on the gridview control inside my usercontrol. Then place the Gridview usercontrol in a updatepanel and still keep the details usercontrol in another updatepanel.

    That way it all worked out. Not impressed by the solution though. Looks a bit ugly.

0 comments:

Post a Comment