2009-08-07 18 views
4

いいえ、私は動的にAsp.net検証コントロールを作成し、更新パネルに挿入しています。検証はIEとFirefoxでは有効ですが、ChromeやSafariでは有効ではありません。Asp.netダイナミックバリデーターはChromeまたはSafariで動作しません

ここにはaspxファイルがあります。

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 

私はボタンサーバーコントロールを使用していない理由はここに

<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> 

が背後にあるコードである...聞かないでくださいChromeやSafariでこれを動作させる方法を知りたい人はいますか?

答えて

8

ASP.NET AJAXはデフォルトでSafariで正常に再生されません。 Safari 1.xで動作させるために、いくつかのJavaScriptハックがありますが、これはもはや必要ありません。残念ながら、これはAJAX for Safari 3を破ります。しかし、解決策があります。

このように、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> 

。これまでASP.NET AJAXの問題はありませんでした。 Microsoftが.NET 3.5 SP1でこれを修正してくれなかったのはかなり愚かですが、何ができるのですか?(

+0

魅力的に働いてくれてありがとうございます。 –

+0

ChromeはWebKitを使用していますが、独自のJavaScriptエンジンを使用していますので、このスクリプトの前にはまったく認識されていなかったようです。ちょうど 'App_Browsers'ファイルですが、うまくいけば動作します:) – Thorarin

+0

投稿してくれてありがとう、私はchromeバージョン8.0.552.237で同じ問題がありました。面白いのは、上記の修正がなくても動作していたことです。それから、動作が停止しました。 – TheLukeMcCarthy

関連する問題