ASP.NET按钮上的C#onClick事件最初没有被触发但是回发...并且在多次单击后最终被触发

时间:2011-11-22 15:14:27

标签: asp.net onclick partial-postback

我有一个奇怪的问题,我不知道在哪里看或如何调试。 我有一个父页A,它有一个7个省的组合框控件;每个省都有一个用户控制(查看)。默认情况下,所选索引是省“SK”,它在同一页面中加载用户控件View动态。

以下是父页面的HTML和代码隐藏

<telerik:RadComboBox ID="cmbProvince" runat="server" OnSelectedIndexChanged="cmbProvince_SelectedIndexChanged" AutoPostBack="true">
<Items>
<telerik:RadComboBoxItem runat="server" Text="Quebec" Value="QC" />
<telerik:RadComboBoxItem runat="server" Text="Ontario" Value="ON" />
<telerik:RadComboBoxItem runat="server" Text="Saskatchewan" Value="SK" />
<telerik:RadComboBoxItem runat="server" Text="Manitoba" Value="MB" />
<telerik:RadComboBoxItem runat="server" Text="Yukon" Value="YT" />
<telerik:RadComboBoxItem runat="server" Text="Nuvanut" Value="NU" />
</Items>
 </telerik:RadComboBox>

protected void Page_PreInit(object sender, EventArgs e)
{
    MasterPage master = this.Master;

    _currentProvince = GetCurrentOperatingProvince(IsPostBack);
    cmbProvince.SelectedValue = _currentProvince;
    txtReferenceNo.Text = "TECHLOS" + DateTime.Now.ToString("MMddyyyy-HHMMss");

    //Reload Dynamic Control on Every Page Creation
    LoadDetailControl();
}

private void LoadDetailControl()
{
    UserControl ucPPSAControl = (UserControl)LoadControl(GetUserControlPath(_currentProvince));
    IPPSAView provView = ucPPSAControl as IPPSAView;

    ApplicationContext.TargetProvince = _currentProvince;

    PPSAPresenter presenter = new PPSAPresenter(provView, ApplicationContext);
    provView.AttachPresenter(presenter, cmbProvince.SelectedValue, txtReferenceNo.Text);

    phPPSAControl.Controls.Add(ucPPSAControl);
}

    protected void cmbProvince_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        phPPSAControl.Controls.Clear();
        _currentProvince = e.Value;
        LoadDetailControl();
    }

在各省的UC中,它有一个带有OnClick事件的搜索按钮。第一次登陆默认省份时,“搜索”按钮按预期工作并触发OnClick,并运行事件处理程序Search_Click。

以下是每个省的典型UC的

HTML button.
 <telerik:RadButton ID="btnSearch" runat="server" Text="Search" OnClick="Search_OnClick">
                            </telerik:RadButton>

and Code behind

        protected void Search_OnClick(object sender, EventArgs e)
        {
            if (isValidSearchRequest())
            {
                DisplayResultsFromResponse(presenter.Search());
            }
            else
            {
                phResponse.Controls.Add(new LiteralControl(string.Format("<span style='color:red'>Invalid Search Request</span>")));
            }
        }

现在,当我将省份更改为“ON”(或任何其他省份具有相同的行为)时,当我单击新生成的UC上的“搜索”按钮时,它只会回发而不会触发OnClick事件。点击两次,做同样的事情......第三次,它确实触发OnClick ...并正常运行!!!

出现此问题,无论我是否“ON”查看第一次加载和“SK”查看(或任何其他视图)的第二时间,我可以假设一些初始创建的视图使得按钮工作正常...但后续重新加载新控件将导致OnClick失败。

另一点需要注意的是,一旦我更改了省份,即使我回到原来的省份,OnClick也无法正常工作......我也在使用Telerik控件和RadAjaxManager

我如何调试这个以找出我的问题所在......更好的我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

花了3天后...看起来这个问题与动态控制有关。我创建它而没有分配ID ...所以在娱乐时,不知何故它回发了几次可能是因为它使用了ASP的生成ID而且每次都不一样,所以我在按钮上的onCLick无法找到按钮最初叫它..我猜第三次,id是相同的,那就是它正确调用它。

无论如何,我知道这解决了我遇到的问题

答案 1 :(得分:0)

在ScriptManager放置此代码后

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="cmbProvince" />
                <telerik:AjaxUpdatedControl ControlID="btnSearch" />
            </UpdatedControls>
        </telerik:AjaxSetting>

    </AjaxSettings>

可以帮到你