简体   繁体   English

没有为RadGrid触发ItemCommand的问题

[英]Issue with ItemCommand not being triggered for a RadGrid

I am facing a weird problem with ItemCommand. 我遇到了ItemCommand的怪异问题。 I have a radGrid which is part of a User Control. 我有一个radGrid,它是用户控件的一部分。 This user control is added as part of another aspx page and ItemCommand is triggered and working fine when a button from GridButtonColumn is clicked. 此用户控件被添加为另一个aspx页面的一部分,并且当单击GridButtonColumn中的按钮时,ItemCommand被触发并且可以正常工作。 However when this user control is added within another user control, ItemCommand is not triggered at all. 但是,当将此用户控件添加到另一个用户控件中时,根本不会触发ItemCommand。 This RadGrid is part of RadAjaxPanel. 此RadGrid是RadAjaxPanel的一部分。 When RadAjaxPanel is removed, ItemCommand is triggered in all scenario. 删除RadAjaxPanel后,将在所有情况下触发ItemCommand。

Here is how User Control looks like 这是用户控件的外观

<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Charting" Assembly="Telerik.Web.UI" %>

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="RecipientsList.ascx.vb" Inherits="Pages.Email.Controls.RecipientsList" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<table style="width:90.5%;" align="center">
<tr>
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="WebBlue">
</telerik:RadAjaxLoadingPanel>
<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="RadAjaxLoadingPanel1">

       <telerik:RadGrid ID="radSelect" runat="server" PageSize="20" Width="100%" FooterStyle-BackColor="AliceBlue" AllowFilteringByColumn="True" AllowSorting="True"
            AllowPaging="True" AutoGenerateColumns="False" OnUpdateCommand ="radSelect_UpdateCommand"
           ResolvedRenderMode="Classic" CellSpacing="-1"  OnItemCommand="radSelect_ItemCommand"
        OnNeedDataSource="radSelect_NeedDataSource" CssClass="RadGridMasterDiv"><PagerStyle Mode="NextPrev"  AlwaysVisible="true"></PagerStyle>

        <GroupingSettings CaseSensitive="False" />
        <MasterTableView Width="100%" AllowNaturalSort="False" DataKeyNames="EMessageID,EMsgReceiverID" ClientDataKeyNames="EMessageID">
            <HeaderStyle Font-Bold="true" />
            <CommandItemSettings ShowAddNewRecordButton="False" ShowRefreshButton="False" />
            <Columns>
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn ReadOnly="true" DataField="SubjectLine" AllowFiltering="true"  UniqueName="Subject" CurrentFilterFunction="Contains" AutoPostBackOnFilter="True" ShowFilterIcon="false">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn ReadOnly="true" DataField="DisplayStatus" UniqueName="Status" CurrentFilterFunction="Contains" AutoPostBackOnFilter="True" ShowFilterIcon="false">
                </telerik:GridBoundColumn>
                <telerik:GridButtonColumn UniqueName="ResendButton" CommandName="Resend">
                </telerik:GridButtonColumn>
            </Columns>           
        </MasterTableView>           
    </telerik:RadGrid>
    <telerik:RadToolTip ID="RadToolTip1" runat="server" OffsetY="3" Position="TopCenter"
                    ShowCallout="false" Height="20px" ShowEvent="fromcode" />
</telerik:RadAjaxPanel>
</tr>
</table>

This is the page where User Control is working correctly 这是用户控制正常运行的页面

<%@ Register TagPrefix="header" TagName="Header" Src="../../Controls/Header.ascx" %>
<%@ Register TagPrefix="reclist" TagName="RescipentList" Src="Controls/RecipientsList.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="FailedEmails.aspx.vb" Inherits="Pages.Email.FailedEmails" smartNavigation="True" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <body MS_POSITIONING="FlowLayout" bottomMargin="10" leftMargin="5" topMargin="10" rightMargin="5">
        <form id="Form1" method="post" runat="server">
            <header:Header id="header" runat="server"></header:Header>
            <reclist:RescipentList id="rList" runat="server" ></reclist:RescipentList>
        </form>
    </body>

Here is another control where ItemCommand is not triggered. 这是另一个未触发ItemCommand的控件。 Here is the hierarchy of my controls 这是我的控件的层次结构

Header -> TabSlideOutControl -> RecipientsList which is included in .aspx page. 标头-> TabSlideOutControl-> RecipientsList,包含在.aspx页面中。

    <%@ Control Language="vb" AutoEventWireup="false" CodeBehind="TabSlideOutControl.ascx.vb"
        Inherits="Pages.Controls.TabSlideOutControl" %>
        <%@ Register TagPrefix="reclist" TagName="RescipentList" Src="~/Pages/Email/Controls/RecipientsList.ascx" %>
<table>            
<tr>
                <td id="wd-Theme1">
                    <div id="divFailedEmails"  class="DIVEMAILS">
                        <reclist:RescipentList id="rList" runat="server" ></reclist:RescipentList>
                     </div>
                    </td>
            </tr>
        </table>

Can someone guide me on what could be the possible reason for ItemCommand not to work? 有人可以指导我了解ItemCommand不起作用的可能原因是什么? I am clueless on how to debug this issue. 我对如何调试此问题一无所知。

Inside ItemCreated event of the RadGrid , register the button with RadScriptManager the register Asynchronous postback for that link button. 里面ItemCreated的事件RadGrid ,注册按钮, RadScriptManager寄存器Asynchronous回传该链接按钮。

RadScriptManager scriptMan = RadScriptManager.GetCurrent(this);
LinkButton btn = e.Item.FindControl("yourButton") as LinkButton;
if(btn != null)
{
    btn.Click += LinkButton1_Click;
    scriptMan.RegisterAsyncPostBackControl(btn);
}

Also don't use ItemCommand here, use LinkButton1_Click and pass id as CommandArgument 也不要在这里使用ItemCommand ,使用LinkButton1_Click并将id作为CommandArgument传递

Hope this helped. 希望这会有所帮助。

Ensure you do not have nested AJAX settings (eg, somewhere in the header or in the TabSlideOutControl control). 确保没有嵌套的AJAX设置(例如,标头或TabSlideOutControl控件中的某个位置)。 Nesting them can cause double disposal of nodes. 嵌套它们会导致节点的双重处理。

Try replacing RadAjaxPanel with asp:UpdatePanel or with RadAjaxManager/RadAjaxManagerProxy setting. 尝试用asp:UpdatePanel或RadAjaxManager / RadAjaxManagerProxy设置替换RadAjaxPanel。

Ensure the overall HTML of the page is valid in case there is a problem with that which breaks AJAX requests. 确保页面的整体HTML有效,以防出现中断AJAX请求的问题。

Make sure there are no script or server-side errors during execution. 确保在执行过程中没有脚本或服务器端错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM