1

我需要为数据列表中的一堆文本框使用自定义验证器,但是我不确定如何从数据列表中调用自定义验证器的“OnServerValidate”。

到目前为止,我正在我的数据列表的 ItemDataBound 中动态创建我的自定义验证器(尽管我对另一种方式持开放态度):

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 回答