0

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

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

4

1 回答 1

0

我看到有2个问题

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