[我在下面发布我们的问题和解决方案仅供引用。如果您有微软或代表组织关于此问题的官方声明,我会将其标记为答案。否则,我下面的帖子将作为答案]。
问题:
我们采用了 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,其中包含作为单选按钮的列表项。结果,ASP.Net + C# 在单选按钮的“onclick”事件中动态生成 doPostBack 函数。但是:没有为默认选定的单选按钮生成 onclick 的 doPostBack 函数。我相信这是 ASP.Net 3.5 框架和 RadioButtonList 控件中的一个错误。
编辑:从问题中删除解决方案并将其作为答案发布以避免问题结束。感谢@Jon P 的提醒。
最佳答案
[我在这篇最初的文章中发布了我们的问题和解决方案,仅供引用。如果您有微软或代表组织关于此问题的官方声明,我会将其标记为答案。否则,这篇文章将作为答案]。
解决方案:
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 事件功能,并且恢复了原始功能。
关于javascript - 从 ASP.NET 1.1 转换为 ASP.Net 3.5 后,单选按钮停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29291265/