2

我遇到了一个奇怪的问题,我不确定在哪里查看或如何调试。我有一个父页面 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 按钮按预期工作并触发 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 上的 Search Button 时,它只会回发而不触发 OnClick 事件。点击两次,做同样的事情……第三次,它确实触发了 OnClick……并正常运行!!!

无论我在第一次加载时是否有“ON”视图,第二次是“SK”视图(或任何其他视图),都会出现这种行为,在这种情况下,我可以假设在视图的初始创建时某些东西会使按钮正常工作...但随后重新加载新控件将导致 OnClick 失败。

还有一点需要注意,一旦我改变了省份,即使我回到原来的省份,OnClick 也不起作用......另外我正在使用带有 RadAjaxManager 的 Telerik 控件

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

4

2 回答 2

1

在这上面花了 3 天后......看起来问题与动态控制有关。我在没有分配 ID 的情况下创建了它......所以在娱乐时,它以某种方式回传了几次,可能是因为它使用的是 ASP 生成的 ID,而且每次都不相同,所以我在按钮上的 onCLick 找不到按钮最初调用它..我想在第 3 次,id 是相同的,那就是它正确调用它的时候。

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

于 2011-11-23T15:38:24.180 回答
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>

可以帮助你

于 2011-11-22T16:25:12.703 回答