Asp.Net,DropDownList,AutoPostBack和Google Chrome

tan*_*hos 12 asp.net google-chrome autopostback drop-down-menu

我有一个简单的asp.net页面(框架3.5)和一个带有一系列下拉列表的UpdatePanel,我想异步填充.一切在所有主流浏览器(Opera,Safari,IE6,IE7,FF3)中都能正常工作,但在Chrome中则不行.

Chrome似乎忽略了必须发出异步请求的SelectedIndexChanged事件.

任何人都知道一个简单的解决方法吗?谢谢!

编辑:更多信息

正如我对Adam Lassek说的那样,更新面板在点击它内部的asp:Button之后刷新,但它不适用于下拉列表的SelectedIndexChanged事件.

updatepanel设置如下:

<asp:UpdatePanel ID="updPanel" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">
Run Code Online (Sandbox Code Playgroud)

没有指定触发器,并且dropdows有集合 AutoPostBack="true"

更新:(并重新开始)

经过几次尝试后,我发现它不是UpdatePanel的问题,但似乎即使在没有ScriptManager和UpdatePanel的页面中,下拉的AutoPostback也无法正常工作......我确信这是一个问题仅涉及这个项目,因为如果我从头开始创建一个新的WebSite并复制它的结构,在Chrome中工作正常...我试图逐步删除原始项目中的所有其他内容以找到确切的内容问题.

如果有人在此期间有一些想法......

jos*_*ley 15

Ajax.NETChromeSafari 3存在已知的不兼容性.

小的,快速的测试可能具有欺骗性,因为它似乎可以与现有的Ajax.NET库一起正常工作.这是因为它设法执行第一个 Ajax请求并在结束时失败,因此只有当您尝试执行第二个 Ajax操作时才会注意到它已失败.如果你在页面上放置一个UpdateProgress控件,你会注意到在第一次请求后你的UpdateProgress控件不会失败.

幸运的是,有一个答案!

最近有一篇很棒的帖子详细介绍了你可以在这里找到的内容:

http://blog.turlov.com/2009/01/aspnet-ajax-compatibility-patch-for.html

它的一般要点是Chrome和Safari 3都在其userAgent字符串中将自己报告为WebKit.

您需要添加一些javascript以帮助Ajax.NET框架识别基于WebKit的浏览器,如下所示:

if (typeof(Sys.Browser.WebKit) == "undefined") {
    Sys.Browser.WebKit = {};
}

if (navigator.userAgent.indexOf("WebKit/") > -1 ) {
    Sys.Browser.agent = Sys.Browser.WebKit;
    Sys.Browser.version = 
        parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name = "WebKit";
}
Run Code Online (Sandbox Code Playgroud)

您需要将其添加到javascript文件并在ScriptManager中引用它:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/assets/javascript/WebKit.js" />
    </Scripts>
</asp:ScriptManager>
Run Code Online (Sandbox Code Playgroud)

请注意,您可以通过使用类似于此的ScriptReference标记将WebKit.js保存在程序集中并引用它:

<asp:ScriptReference Assembly="Scripts" Name="Scripts.webkit.js" />
Run Code Online (Sandbox Code Playgroud)

一旦你完成了所有这些,如果可能的话,停止使用WebForms和Ajax.NET并使用MVC和jQuery :)