2009-08-07 96 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

相关问题