2009-08-07 4 views
4

Ok, je crée dynamiquement des contrôles de validation Asp.net et je les insère dans un panneau de mise à jour. La validation fonctionne dans IE et Firefox, mais pas dans Chrome ou Safari.Les validateurs dynamiques Asp.net ne fonctionnent pas dans Chrome ou Safari

Voici le fichier ASPX. Ne demandez pas pourquoi je ne suis pas au moyen d'un contrôle serveur bouton ...

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

Voici le code derrière:

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 

Et voici la classe:

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 

Est-ce que quelqu'un a des idées sur la façon de le faire fonctionner dans Chrome et Safari? ASP.NET AJAX ne fonctionne pas bien avec Safari par défaut.

Répondre

8

Il a plusieurs hacks JavaScript pour le faire fonctionner avec Safari 1.x qui ne sont plus nécessaires. Malheureusement, cela rompt AJAX pour Safari 3. Mais, il existe une solution.

Créer une Safari3AjaxHack.js, comme ceci:

// 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'; 
} 

Définissez ensuite votre ScriptManager comme ceci:

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

Je ne suis pas sûr de Chrome. Je n'ai pas eu de problèmes ASP.NET AJAX avec cela jusqu'à présent. Il est assez idiot que Microsoft n'a pas résolu cela dans .NET 3.5 SP1 au moins, mais que pouvez-vous faire: (

+0

travaillé comme un charme, merci beaucoup.Cela a fonctionné dans Chrome aussi.Je crois que Safari et Chrome à la fois –

+0

Ce que j'espérais, c'est que Chrome utilise WebKit, mais il a son propre moteur JavaScript, je suppose qu'il n'était pas reconnu du tout avant ce script. juste un fichier 'App_Browsers', mais si cela fonctionne, cela fonctionne :) – Thorarin

+0

Merci pour le poste, j'ai eu le même problème dans la version de chrome 8.0.552.237. La chose amusante est que ça fonctionnait sans le correctif ci-dessus pour commencer, puis ça a juste cessé de fonctionner. – TheLukeMcCarthy

Questions connexes