从ASP.NET 1.1转换为ASP.Net 3.5后,单选按钮停止工作

[我在下面发布我们的问题和解决方案作为FYI。 如果您有关于此问题的Microsoft或代理组织的正式声明,我会将其标记为答案。 否则,我的post将作为答案]。

问题:

我们采用了ASP.Net 1.1程序并将其转换为ASP.Net 3.5。 页面最初正确显示,默认情况下选择一个单选按钮和项目列表(“列表A”)。 当我们点击另一个单选按钮时,它会正确显示列表B. 当我们单击最初选择的单选按钮时,第一个列表A列表将不会重新显示。 单选按钮是RadioButtonList控件的一部分。

我们做了什么调试:这是一个驻留在公司内部网上的程序。 由于它是.Net 1.1,该程序主要针对Internet Explorer – JavaScript不能在其他浏览器上运行。 F12开发人员工具在Internet Explorer中调出JavaScript调试控制台。 使用Visual Studio附加到IIS 7.5进程(w3wp.exe)允许我们查看C#服务器代码错误。

我们发现:在RadioButtonList上将AutoPostBack设置为true,其中包含List项目,这些项目是单选按钮。 因此,ASP.Net + C#在单选按钮的“onclick”事件中动态生成doPostBack函数。 但是:没有为默认选择的单选按钮生成onclick的doPostBack函数。 我相信这是ASP.Net 3.5框架和RadioButtonList控件中的一个错误。

编辑:从问题中删除解决方案并作为答案发布以避免问题结束。 谢谢@Jon P的单挑。

[我将这个问题和解决方案作为一个FYI发布在这个初始post中。 如果您有关于此问题的Microsoft或代理组织的正式声明,我会将其标记为答案。 否则,这篇文章将作为答案]。

解:

1)我们将RadioButtonList控件的AutoPostBack设置为false。

2)在页面的PreRender事件中,我们通过循环遍历RadioButtonList中的列表项,手动将新的doPostBack函数添加到单选按钮列表中的每个List项。

3)代码如下:

for (int i = 0; i < rbList.Items.Count; i++) { rbList.Items[i].Attributes.Add("onclick", "javascript:setTimeout('__doPostBack(\\'rbList$" + i + "\\',\\'\\')', 0)"); } 

4)onclick事件函数调用中的代码与ASP.Net 3.5 + C#自动生成的结构相匹配。

完成此修复后,两个单选按钮都具有onclick事件function,并恢复了原始function。