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. 更新パネルがサーバーへの非同期ポストバックを引き起こす場合、動的コントロールを使用してコントロールのツリーを作成できません。
  2. 更新パネルの下に使用法バリデータの問題があります - 更新パネルが機能する前にスクリプトをロードする必要があります。UpdatePanel の下に架空の RequiredFieldValidator を割り当てることを提案できます。それらを Display=none (Visible=false ではありません!!!) に設定するか、存在しない ValidationGroup に配置します。これにより、JScript をページにレンダリングできます。
于 2009-08-07T15:35:43.270 に答える