我有一个奇怪的问题,我不知道在哪里看或如何调试。我有一个父页面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>
可能对你有帮助