1

データリスト内の一連のテキストボックスにカスタムバリデーターを使用する必要がありますが、データリスト内からカスタムバリデーターの「OnServerValidate」を呼び出す方法がわかりません。

これまでのところ、データリストの ItemDataBound 内で customvalidators を動的に作成しています (ただし、別の方法も使用できます)。

protected void dataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
     CustomValidator cv = (CustomValidator) e.Item.FindControl("CustomValidator1");
    cv.ControlToValidate = "txtTextBox1";
    cv.ServerValidate += new EventHandler(CustomValidator1_ServerValidate);
}

しかし、私の「cv.ServerValidate」行はエラーをスローしています。「OnServerValidate」があることを確認するためにこれを適切に設定する方法が完全にはわかりません

ありがとう

4

1 に答える 1

0

実行時に CustomValidator を作成する必要はありません。テンプレート内で使用する方がはるかに簡単です。テキスト ボックスを検証するために EditItemTemplate 内で使用するサンプル コードを次に示します。

<asp:DataList ID="DataList1" runat="server">
    <EditItemTemplate>
        <asp:TextBox ID="TextBoxNextActionDate" Text='<%# Bind("NextActionDate") %>' runat="server"
                        CssClass="gridTextBoxEdit140"></asp:TextBox>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBoxNextActionDate"
                        ErrorMessage='<% $resources:AppResource,NotValidDateTime %>' Display="Dynamic"
                        OnServerValidate="DateTimeCustomValidator_ServerValidate"></asp:CustomValidator>
     </EditItemTemplate>
</asp:DataList> 

そして、ここにハンドラーがあります:

    protected void DateTimeCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
    {
        DateTime d = new DateTime();
        if (!DateTime.TryParse(args.Value, out d))
        {
            args.IsValid = false;
        }
        else
        {
            args.IsValid = true;
        }
    }

お役に立てれば!

于 2012-11-05T23:02:07.390 に答える