2009-08-07 94 views
4

好的,我正在動態創建Asp.net驗證控件並將它們插入到更新面板中。驗證適用於IE和Firefox,但不適用於Chrome或Safari。Asp.net動態驗證器在Chrome或Safari中不起作用

這是aspx文件。不要問我爲什麼不使用一個按鈕服務器控件...

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<div> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Always" runat="server"> 
    <ContentTemplate> 

     <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
     <input id="Button1" type="button" value="submit" onclick='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "btnNext", true, "", "", false, true))' /> 

    </ContentTemplate> 

</asp:UpdatePanel> 

</div> 

這裏是後面的代碼:

Dim Survey As New Survey 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Request("__EVENTARGUMENT") = "btnNext" Then 
     NextClick() 
    End If 

    Label1.Text = Date.Now.ToString 



End Sub 

Private Sub NextClick() 
    Survey.RenderPage(PlaceHolder1) 
End Sub 

這裏是類:

Public Class Survey 

    Public Sub RenderPage(ByVal PlaceHolder As PlaceHolder) 

     Dim textbox As New TextBox 
     textbox.ID = "testing" 
     PlaceHolder.Controls.Add(textbox) 

     Dim val As New RequiredFieldValidator 
     val.ControlToValidate = textbox.ID 
     val.Text = "required" 
     val.EnableClientScript = True 
     PlaceHolder.Controls.Add(val) 

    End Sub 
End Class 

有沒有人有任何想法如何讓這個工作在Chrome和Safari?

回答

8

默認情況下,ASP.NET AJAX在Safari上播放不好。它有幾個JavaScript黑客入侵,以使其不再需要Safari 1.x。不幸的是,這打破了Safari 3的AJAX。但是,有一個解決方案。

創建Safari3AjaxHack.js,像這樣:

// Safari 3 AJAX "issue". It no longer needs JavaScript hacks that are still implemented 
// http://forums.asp.net/p/1252014/2392110.aspx 

Sys.Browser.WebKit = {}; //Safari 3 is considered 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'; 
} 

然後這樣定義您的ScriptManager:

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

我不知道關於Chrome。到目前爲止,我還沒有ASP.NET AJAX問題。至少微軟並沒有在.NET 3.5 SP1中解決這個問題,但是你可以做些什麼:(

+0

像一個魅力一樣工作,非常感謝你。我也相信Safari和Chrome都是這樣的。 – 2009-08-07 21:44:26

+0

這就是我所希望的,Chrome使用WebKit,但它有它自己的JavaScript引擎,我猜這只是在這個腳本之前根本沒有被識別出來,或許你可以用它來解決這個問題。只是一個'App_Browsers'文件,但如果它的工作,它的工作:) – Thorarin 2009-08-07 21:47:44

+0

感謝您的帖子,我有相同的問題在鉻版本8.0.552.237。有趣的是,它沒有上面的修復工作開始,然後它停止工作。 – TheLukeMcCarthy 2011-01-17 11:59:02

相關問題