动态验证控件在更新面板中不起作用

时间:2009-08-07 15:24:28

标签: asp.net ajax validation-controls

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

这是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的第一个版本不支持验证控件,但一切都是最新的。

1 个答案:

答案 0 :(得分:0)

我看到有2个问题

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