Динамические валидаторы Asp.net не работают в Chrome или Safari - PullRequest
4 голосов
/ 08 августа 2009

Хорошо, я динамически создаю элементы проверки Asp.net и вставляю их в панель обновлений. Проверка работает в IE и Firefox, но не в 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?

1 Ответ

8 голосов
/ 08 августа 2009

ASP.NET AJAX не очень хорошо работает с Safari по умолчанию. В нем есть несколько хаков JavaScript для работы с Safari 1.x, которые больше не нужны. К сожалению, это нарушает AJAX для 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>

Я не уверен насчет Chrome. У меня до сих пор не было проблем с ASP.NET AJAX. Довольно глупо, что Microsoft по крайней мере не исправила это в .NET 3.5 SP1, но что вы можете сделать: (

...