【问题标题】:Dynamic Validation Controls Don't Work in Update Panel动态验证控件在更新面板中不起作用
【发布时间】:2009-08-07 15:24:27
【问题描述】:

我正在动态创建验证控件并将它们添加到更新面板。但是客户端验证永远不会触发。

这是aspx文件:

<div>
    <asp:UpdatePanel ID="UpdatePanel1"  UpdateMode="Conditional" runat="server">
    <ContentTemplate>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
    </ContentTemplate>
    <Triggers >
        <asp:AsyncPostBackTrigger ControlID ="Button1" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

<asp:Button ID="Button1" runat="server" Text="Button"  CausesValidation="true"/>


</div>

下面是代码:

Dim Survey As New Survey
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    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

当您点击下一步时,客户端验证永远不会触发。真正奇怪的是,当您将按钮包装在另一个更新面板中时,验证会触发(在 IE 和 Firefox 中,但不在 Chrome 或 Safari 中)。

有人知道发生了什么吗?我知道 Asp.net AJAX 的第一个版本不支持验证控件,但我的一切都是最新的。

【问题讨论】:

    标签: asp.net ajax validation-controls


    【解决方案1】:

    我发现有 2 个问题

    1. 当更新面板导致异步回发到服务器时,它无法使用您的动态控件创建控件树 - 因此请检查您是否从 Page_Load 调用 RenderPage 以获得 ScriptManager.IsInAsyncPostBack == true
    2. 更新面板下存在使用验证器问题 - 必须在更新面板工作之前加载脚本。我可以建议您在 UpdatePanel 下分配虚构的RequiredFieldValidator。将它们设置为 Display=none(但不是 Visible=false !!!)或放置到不存在的 ValidationGroup。这允许将 JScript 呈现到您的页面中。

    【讨论】:

    • 感谢您的回复。搞砸了一段时间后,我可以让它在 IE 和 Firefox 中工作,但不能在 Chrome 或 Safari 中工作,所以我发布了一个单独的问题。 stackoverflow.com/questions/1247032/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多