c# onClick Event. NET按钮最初没有被触发,但回发…并最终在多次点击后开火



我有一个奇怪的问题,我不知道在哪里看或如何调试。我有一个父页面a,它有一个包含7个省份的组合框控件;每个省都有一个用户控件(视图)。缺省情况下,所选索引为省"SK",在同一页面动态加载用户控制视图。

下面是我的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事件的Search按钮。当我第一次到达默认省份时,Search按钮按预期工作并触发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将无法工作…此外,我使用teleerik控件与RadAjaxManager

我如何调试这个找出我的问题在哪里…更棒的是,我该怎么解决这个问题?

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

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

在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>

可能对你有帮助

最新更新