【问题标题】:Button Click Event Not Firing按钮单击事件未触发
【发布时间】:2011-08-24 04:17:43
【问题描述】:

需要帮助。

说明: 我有一个从 DataGrid 添加新命令启动的工作流类型用户控件。 UserControl 的第 1 步允许用户输入一些搜索条件,单击 Next 按钮将显示一个动态创建的 UserControl(第 2 步),该控件显示检索到 datagrid 的数据行。然后,用户选择他们想要从中建模新条目的行并单击 srNextButton 以转到最终的数据输入屏幕。

问题: 动态创建的用户控件(步骤 2)上的 srNextButton 不会触发按钮事件处理程序代码,也不会导致任何类型的回发。我做错了什么?

用户控制第二步:

    <div style="width: 1000px; height: 400px; overflow: scroll;">
        <telerik:RadGrid ID="grd1" runat="server" CellSpacing="0" GridLines="None">
            <headercontextmenu cssclass="GridContextMenu GridContextMenu_Default">
    </headercontextmenu>
            <mastertableview tablelayout="Auto" width="95%">
        <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>
        <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
            <HeaderStyle Width="20px"></HeaderStyle>
        </RowIndicatorColumn>
        <ExpandCollapseColumn FilterControlAltText="Filter ExpandColumn column">
            <HeaderStyle Width="20px"></HeaderStyle>
        </ExpandCollapseColumn>
        <EditFormSettings>
            <EditColumn FilterControlAltText="Filter EditCommandColumn column">
            </EditColumn>
        </EditFormSettings>
    </mastertableview>
            <clientsettings>
        <Selecting AllowRowSelect="True" />
    </clientsettings>
            <filtermenu enableimagesprites="False">
    </filtermenu>
        </telerik:RadGrid>
        <asp:Button runat="server" ID="srNextButton" OnClick="nextButton_Click" Text="Next"
            CssClass="nextButton" AutoPostBack="true" />
        <asp:Button runat="server" ID="btnCancel" OnClientClick="CancelEdit()" Text="Cancel"
            CssClass="nextButton" />
    </div>

代码第二步:

    protected void nextButton_Click(object sender, EventArgs e)
    {
        GridIndexCollection _int = this.grdPolicyCoverage.SelectedIndexes;
        GoToNextItem(this);
    }

我也尝试添加:

    protected override void OnInit(EventArgs e)
    {

        base.OnInit(e);
        this.PreRender += SearchResults_PreRender;

        if (!IsPostBack)
        {
            this.srNextButton.Click += new EventHandler(nextButton_Click);
        }

    }

我有一个 BaseUserControl.cs 来容纳控件的加载

    protected void GoToNextItem(Control control)
    {

        //RadPanelBar _radPanelBar = (RadPanelBar)page.Page.FindControl("RadPanelBar1");
        //NewAdjustment _newAdjustment = (NewAdjustment)this.Page.FindControl() 
        RadPanelBar _radPanelBar =
            (RadPanelBar) control.Parent.Parent.Parent.Parent.Parent.FindControl("RadPanelBar1");

        int selectedIndex = _radPanelBar.SelectedItem.Index;

        if (selectedIndex == 1)
        {
            RadPanelItem _pnlSearchResults = (RadPanelItem)_radPanelBar.FindItemByValue("SearchResults");
            _pnlSearchResults.Controls.Add(LoadControl("~/Controls/AdjustmentWorkFlow/SearchResults.ascx"));

        }
        _radPanelBar.Items[selectedIndex + 1].Selected = true;
        _radPanelBar.Items[selectedIndex + 1].Expanded = true;
        _radPanelBar.Items[selectedIndex + 1].Enabled = true;
        _radPanelBar.Items[selectedIndex].Expanded = false;


    }

父用户控件开始时,它下面的每个控件都位于 RadAjaxPanel 中,如果这会有所不同的话。

【问题讨论】:

  • 删除if (!IsPostBack)

标签: c# asp.net user-controls


【解决方案1】:

只需尝试删除代码:

this.srNextButton.Click += new EventHandler(nextButton_Click);

来自OnInit,就像您在上面的问题中所做的那样,并将其放在Page_Load 事件处理程序中,而不检查 IsPostBack。

它现在如何运作? :)

【讨论】: