Disabling AJAX on GridButtonColumn

8 posts, 0 answers
  1. Cory Benjamin
    Cory Benjamin avatar
    18 posts
    Member since:
    Jul 2006

    Posted 13 Jun 2008 Link to this post

    I have an AJAX enable RadGrid.  One of the columns in this grid is a GridButtonColumn.  I want to do a regular postback when this button is clicked because it initiates a file download.

    I thought I could use client side java script to disable AJAX on this call, but I am having trouble identifying whether the button was clicked or not.  Here's what I have so far:

    In the grid:

    <telerik:GridButtonColumn ButtonType="PushButton" UniqueName="Download" CommandName="Download" Text="Download"></telerik:GridButtonColumn>

    In the AJAX Manager:

    <

    ClientEvents OnRequestStart="mngRequestStarted" />

    Client side java script

    <script type="text/javascript">

    function mngRequestStarted(ajaxManager, eventArgs)

    {

        var re = new RegExp("\.DownloadButton$","ig");

        if (eventArgs.EventTarget.match(re))

        {

            eventArgs.EnableAjax = false;

        }

    }

    </script>

    Everything seems to work except the regular expression check.  I was hoping that the button controls would be named DownloadButton* (based on the UniqueName), but instead they are named like clt00$ContentPlaceHolder1$RadGrid1$ctl00$ctl04$ctl00.  Any suggestions on how I can make this work?  Thanks.

  2. Sebastian
    Admin
    Sebastian avatar
    9934 posts

    Posted 16 Jun 2008 Link to this post

    Hi Cory,

    Thank you for the detailed explanation.

    Indeed the id of the button inside the GridButtonColumn will be auto-generated and you will not be able to identify it with this approach using a regular expression.

    Instead I suggest you replace the GridButtonColumn with GridTemplateColumn with buttton inside it which has explicitly set id and CommandName (for example id = "DownloadButton" and CommandName ="Download"). Thus you will be able to determine the button click and disable the ajax with the code you pasted in the thread.
     
    Best regards,
    Stephen
    the Telerik team

    Instantly find answers to your questions at the new Telerik Support Center
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Markus
    Markus avatar
    103 posts
    Member since:
    Dec 2007

    Posted 11 Jul 2008 Link to this post

    Hi!

    Did you check if the onrequeststart event is fired?
    I have exactly the same problem, but here I don't even reach the "OnRequestStart" method when clicking on and buttoncolumn.

    could you please try that (e.g. by using some alert(args.TargetEvent) or something) ?

    Thx in advance & kind regards - in the meantime i'll use my temlate column ;)
  5. Yavor
    Admin
    Yavor avatar
    11 posts

    Posted 11 Jul 2008 Link to this post

    Hi Markus,

    I double tested the proposed setup.
    The client side handler is properly raised, but the client id which is generated, and which is returned as the event target for the method, is something line "RadGrid1$ctl00$ctl04$ctl00" - thus the regular expression will fail and the ajax will not be disabled as expected.

    Best wishes,
    Yavor
    the Telerik team

    Instantly find answers to your questions at the new Telerik Support Center
  6. Markus
    Markus avatar
    103 posts
    Member since:
    Dec 2007

    Posted 11 Jul 2008 Link to this post

    Alright, thank you.

    I'll add this thing to my sampleproject which I handed in as support ticket the other day.

    Maybe it's again an issue with detailtables and containing controls that have a ridgrid inside ?!?!....

    We'll see... ticket id was: 148821

    perhaps you can test it in this application when adding a radgrid with a buttoncolumn to the control in the detailtable

    kind regards
  7. Yavor
    Admin
    Yavor avatar
    11 posts

    Posted 14 Jul 2008 Link to this post

    Hello Markus,

    This is actually part of the mechanism the client id is built. It cannot be altered - one alternative is to use the template column as mentioned earlier.

    Sincerely yours,
    Yavor
    the Telerik team

    Instantly find answers to your questions at the new Telerik Support Center
  8. Marty
    Marty avatar
    61 posts
    Member since:
    Oct 2008

    Posted 10 Dec 2008 Link to this post

    Hi,

    I'm trying to do the exact same thing as the original poster, but am doing so with a grid embedded in a RadPanelBar.  I'm trying to go with the suggested work around for performing a full postback on a button contained within a grid on an ajaxified form.  I've replaced my GridButtonColumn with a GridTemplateColumn and added a button with a specific ID in the ItemTemplate tag.  My question is, how do I go about getting reference to the LinkButton object within my ItemTemplate when the grid itself is embedded in a RadPanelBar?

    I've tried all of the following to no avail (all end up returning a null reference): 
    ((LinkButton)RadPanelBar3.FindItemByValue("SuppDocs").FindControl("GrdDocs").FindControl("btnSave")).UniqueID   
    ((LinkButton)RadPanelBar3.FindItemByValue("SuppDocs").FindControl("GrdDocs").TemplateControl.FindControl("btnSave")).UniqueID   
    ((LinkButton)RadPanelBar3.FindItemByValue("SuppDocs").FindControl("GrdDocs").TemplateControl.FindControl("colSave").FindControl("btnSave")).UniqueID  

    The relevant aspx code is as follows:

    <telerik:RadPanelBar runat="server" ID="RadPanelBar3" Skin="Default" EnableEmbeddedSkins="True" 
        Width="740px">  
        <CollapseAnimation Duration="100" Type="None" /> 
        <Items> 
            <telerik:RadPanelItem Enabled="true" Expanded="true" runat="server" Font-Bold="True" 
                Text="Supporting Documentation">  
                <Items> 
                    <telerik:RadPanelItem runat="server" Value="SuppDocs">  
                        <ItemTemplate> 
                            <table> 
                                <tr> 
                                    <table> 
                                        <tr> 
                                            <td> 
                                                <telerik:RadGrid ID="GrdDocs" runat="server" GridLines="None" ShowGroupPanel="True" 
                                                    AutoGenerateColumns="False" AllowPaging="True" OnNeedDataSource="GrdDocs_OnNeedDataSource" 
                                                    OnUpdateCommand="GrdDocs_ViewSelected" OnDeleteCommand="GrdDocs_OnDelete">  
                                                    <HeaderContextMenu EnableTheming="True">  
                                                        <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> 
                                                    </HeaderContextMenu> 
                                                    <MasterTableView DataKeyNames="DocumentID">  
                                                        <RowIndicatorColumn> 
                                                            <HeaderStyle Width="20px"></HeaderStyle> 
                                                        </RowIndicatorColumn> 
                                                        <ExpandCollapseColumn> 
                                                            <HeaderStyle Width="20px"></HeaderStyle> 
                                                        </ExpandCollapseColumn> 
                                                        <Columns> 
                                                            <telerik:GridBoundColumn DataField="DocumentID" EmptyDataText="&amp;nbsp;" HeaderText="Document ID" 
                                                                UniqueName="column" Visible="False">  
                                                            </telerik:GridBoundColumn> 
                                                            <telerik:GridBoundColumn DataField="FileName" EmptyDataText="&amp;nbsp;" HeaderText="File Name" 
                                                                UniqueName="column1">  
                                                            </telerik:GridBoundColumn> 
                                                            <telerik:GridBoundColumn DataField="DateUploaded" EmptyDataText="&amp;nbsp;" HeaderText="Date Uploaded" 
                                                                UniqueName="column2">  
                                                            </telerik:GridBoundColumn> 
                                                            <telerik:GridBoundColumn DataField="AddedBy" EmptyDataText="&amp;nbsp;" HeaderText="Added By" 
                                                                UniqueName="column3">  
                                                            </telerik:GridBoundColumn> 
                                                            <telerik:GridButtonColumn ButtonType="LinkButton" Text="Delete" UniqueName="colDelete" 
                                                                CommandName="Delete">  
                                                            </telerik:GridButtonColumn> 
                                                            <telerik:GridTemplateColumn HeaderText="Save/View" UniqueName="colSave">  
                                                                <ItemTemplate> 
                                                                    <asp:LinkButton ID="btnSave" runat="server" OnCommandName="Update" Text="Save/View" /> 
                                                                </ItemTemplate> 
                                                            </telerik:GridTemplateColumn> 
                                                        </Columns> 
                                                    </MasterTableView> 
                                                    <FilterMenu EnableTheming="True">  
                                                        <CollapseAnimation Type="OutQuint" Duration="200"></CollapseAnimation> 
                                                    </FilterMenu> 
                                                </telerik:RadGrid> 
                                            </td> 
                                        </tr> 
                                    </table> 
                                    </td> 
                                </tr> 
                            </table> 
                        </ItemTemplate> 
                    </telerik:RadPanelItem> 
                </Items> 
            </telerik:RadPanelItem> 
        </Items> 
    </telerik:RadPanelBar> 

    Any help is appreciated, thanks.

    Marty
  9. Sebastian
    Admin
    Sebastian avatar
    9934 posts

    Posted 15 Dec 2008 Link to this post

    Hi Marty,

    To reference the button inside the template column in the grid, you will need to reference a particular grid row which hosts it, for example:

    ((LinkButton)RadPanelBar3.FindItemByValue("SuppDocs").(CType("GrdDocs"), RadGrid).MasterTableView.Items[0].FindControl("btnSave")).UniqueID  

    Then you can pass the UniqueID of the control on the client to disable the ajax explicitly when the button is clicked. Alternatively, create an appropriate regular expression on the client which matches part of the unique id of the button, i.e.:

    <script type="text/javascript">   
      function mngRequestStarted(ajaxManager, eventArgs)   
      {  
        var re = new RegExp("\.btnSave$","ig");   
        if (eventArgs.EventTarget.match(re))   
        {  
            eventArgs.EnableAjax = false;   
        }  
    }  
    </script>  
     

    Best regards,
    Sebastian
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017