Asp.net

Asp.Net、DropDownList、AutoPostBack 和 Google Chrome

  • May 19, 2009

我有一個簡單的 asp.net 頁面(框架 3.5)和一個帶有一系列下拉列表的 UpdatePanel,我想非同步填充。在所有主流瀏覽器(Opera、Safari、IE6、IE7、FF3)中一切正常,但在 Chrome 中卻不行。

Chrome 似乎忽略了必鬚髮出非同步請求的 SelectedIndexChanged 事件。

任何人都知道一個簡單的解決方法嗎?謝謝!

編輯:更多資訊

正如我對 Adam Lassek 所說,更新面板在點擊其中的 asp:Button 後刷新,但它不適用於下拉菜單的SelectedIndexChanged事件。

更新面板設置如下:

<asp:UpdatePanel ID="updPanel" runat="server" UpdateMode="Always" ChildrenAsTriggers="true">

沒有指定觸發器,並且下拉菜單有集合AutoPostBack="true"

**更新:(**和重新標記)

經過幾次嘗試,我發現這不是 UpdatePanel 的問題,但似乎下拉菜單的 AutoPostback 無法正常工作,即使在沒有 ScriptManager 和 UpdatePanel 的頁面中也是如此……我確定這是一個問題只涉及這個項目,因為如果我從頭開始一個新的網站並複制它的結構,在 Chrome 中工作正常……我正在嘗試逐步刪除原始項目中的所有其他內容,以找到確切的內容問題。

如果有人在此期間有一些想法……

已知與Ajax.NETChrome & Safari 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";
}

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

<asp:ScriptManager ID="ScriptManager1" runat="server">
   <Scripts>
       <asp:ScriptReference Path="~/assets/javascript/WebKit.js" />
   </Scripts>
</asp:ScriptManager>

請注意,您可以將WebKit.js保存在程序集中並通過使用類似於以下的 ScriptReference 標記來引用它:

<asp:ScriptReference Assembly="Scripts" Name="Scripts.webkit.js" />

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

引用自:https://stackoverflow.com/questions/508994