前言:

今天在ASP.NET Forum里面遇到了一个及其怪异的问题,一个看似非常简单的demo在IE及其它浏览器中正常运行,然而在Firefox中却导致了奇怪的问题,使页面中的DropDownList死掉,经过研究,终于找到了一个解决方案,但此问题是谁的Bug仍不得而知。

问题重现:

一个ScriptManager

一个DropDownList

一个UpdatePanel,内有一个Button

在按钮点击事件中使用ScriptManager.RegisterStartupScript来输出一个window.alert

OK,够简单吧?!代码如下:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void Page_Load(object sender, EventArgs e) { }

protected void Button1_Click(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this.Button2, Button2.GetType(), "CodeAlert", "alert('kao!');", true);
        Button2.Text = "Updated " + DateTime.Now.ToString();
    }

</script>

<html>
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    </div>
    <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem>Text1</asp:ListItem>
        <asp:ListItem>Text2</asp:ListItem>
        <asp:ListItem>Text3</asp:ListItem>
        <asp:ListItem>Text4</asp:ListItem>
        <asp:ListItem>Text5</asp:ListItem>
    </asp:DropDownList>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

好!接下来,在IE浏览器中,结果就不用说了,非常正常。 让我们来看看在Firefox中的神奇现象:

大家可以看到,在按钮点击之后,我点击DropDownList,却发现不能选择想要的Item了!再点——下拉列表框根本就不出来了!

这时候,如果在页面上 右键——查看网页源码,关掉源码窗口,再回来试试——一切又恢复了正常。。。

Trouble Shooting

将RegisterStartupScript换成RegisterClientScriptBlock,问题依然如故。

调用其它JavaScript方法(非window.alert)则不会出现此问题。

解决方案

既然调用其它JavaScript方法(非window.alert)则不会出现此问题,那么我们试着用window.SetTimeout来间接执行alert:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void Page_Load(object sender, EventArgs e) { }

protected void Button1_Click(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(this.Button2, Button2.GetType(), "CodeAlert", "window.setTimeout(\"alert('Your code is expired at " + DateTime.Now.ToString() + "')\",0);", true);
        Button2.Text = "Updated " + DateTime.Now.ToString();
    }

</script>

<html>
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    </div>
    <asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem>Text1</asp:ListItem>
        <asp:ListItem>Text2</asp:ListItem>
        <asp:ListItem>Text3</asp:ListItem>
        <asp:ListItem>Text4</asp:ListItem>
        <asp:ListItem>Text5</asp:ListItem>
    </asp:DropDownList>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

测试,在Firefox下终于正常了。

疑惑

至于为什么会有这样的现象,是Firefox的bug还是ASP.NET AJAX的bug,仍不得而知...

转载于:https://www.cnblogs.com/blodfox777/archive/2009/03/24/1420701.html

ASP.NET AJAX Advance Tips Tricks (9) DropDownList在Firefox下的奇怪现象和解决方案——谁的BUG?...相关推荐

  1. ASP.NET AJAX Advance Tips Tricks (11) 三种方法动态创建Tooltip

    前言 如何动态创建提示框(Tooltip)是ASP.NET Forum里的常见问题之一,在做技术支持时,我曾在英文博客上总结过ASP.NET和ASP.NET AJAX环境下如何动态创建提示框的三种常见 ...

  2. Asp.net Ajax框架教程

    目录 (一).概述... (二).应用场景代码示例... 1).ScriptManager控件示例...     1. 在异步调用服务端注册客户端脚本新方法...     2. 捕获Ajax异步调用中 ...

  3. 优化asp.net ajax的脚本资源下载

    大家好像都有一种同感,使用了asp.net ajax的网站的速度好像都不是特别快.目前维护的网站,页面执行时间在0.1秒上下,页面本身的HTML也在50K左右,经常都是页面标题已经显示出来一段时间了, ...

  4. Asp.net Ajax框架教程[教程下载]

    Asp.net Ajax 框架教程 目录 (一).概述... (二).应用场景代码示例... 1).ScriptManager控件示例...      1. 在异步调用服务端注册客户端脚本新方法... ...

  5. July 4th Links: ASP.NET, ASP.NET AJAX, Visual Studio, Silverlight and IIS7

    原文地址: http://weblogs.asp.net/scottgu/archive/2007/07/04/july-4th-links-asp-net-asp-net-ajax-visual-s ...

  6. Lost HTML Intellisense within ASP.NET AJAX Controls

    原文出处:ScottGu's Blog Symptom: You are using ASP.NET AJAX Beta1 or Beta2, and create a .aspx page that ...

  7. 转:45 Useful JavaScript Tips, Tricks and Best Practices

    原文来自于:http://flippinawesome.org/2013/12/23/45-useful-javascript-tips-tricks-and-best-practices/ 1 – ...

  8. ASP.NET AJAX(服务器回调)

    如果只用纯粹的 js ,你必须弥补 ASP.NET 服务器端抽象和有限的 HTML DOM 之间的鸿沟,这不简单,没有 VS 的智能提示和调试工具,编写无错的代码和诊断错误都非常困难.由于各种突发事件 ...

  9. 转:26个Jquery使用小技巧(jQuery tips, tricks solutions)

    26个Jquery使用小技巧(jQuery tips, tricks & solutions) 前段时间发布了Jquery类库1.4版本,使用者也越来越多,为了方便大家对Jquery的使用,下 ...

最新文章

  1. Oracle Data Guard 理论知识
  2. sqlserver 事务日志已满和'PRIMARY'
  3. P4323-[JSOI2016]独特的树叶【换根dp,树哈希】
  4. 【渝粤教育】电大中专办公设备使用与维护 (2)_1作业 题库
  5. php判断一个字符串是否为纯数字,php判断变量是否为纯数字字符串的方法
  6. 【linux】RedHat 安装 gcc、g++
  7. html禁止页面左右滑动,js阻止移动端默认事件以及只阻止横向滚动事件方法
  8. 基于Redis实现的抢购代码示例
  9. 9.25-CSS样式以及结构布局
  10. leetcode题解179-最大数
  11. 在.NET中读写INI文件 ——兼谈正则表达式的应用
  12. java 找出调用的方法_如何找到用Java调用给定方法的所有方法?
  13. [在职软件工程]面向对象的分析与设计
  14. 华为笔试题——分礼物
  15. 微软enchange服务器安装,Exchange 2010 图文安装详解
  16. 《自己动手写网络爬虫》笔记2-Http状态码
  17. 科比生涯数据分析——利用随机森林进行分类
  18. Linux知识点整理(五)—— Linux 磁盘与文件系统管理
  19. 程序员遇到有远见的丈母娘
  20. Uefi ABL读取XBL设置的标志位

热门文章

  1. Educational Codeforces Round 54 (Rated for Div. 2): D. Edge Deletion(最短路树)
  2. bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(DP)
  3. bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线(二分+SPFA)
  4. bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)
  5. 一文理解 pytorch 拟合网络的过程
  6. matlab2c使用c++实现matlab函数系列教程-ismember函数
  7. jQuery Mobile中弹窗popup的data-*选项
  8. word2016实现制表法设置公式居中,公式居中,编号右对齐
  9. 计算机操作视频及运用方式,电脑上可以使用什么方法来编辑、制作视频?
  10. 高一计算机word的试题,高一年级信息技术期末考试复习题