Asp.net 在页面中为USercontrol内的文本框设置ControlToValidator验证CustomValidator,以显示带有ValidatorCalloutExtender的消息

Asp.net 在页面中为USercontrol内的文本框设置ControlToValidator验证CustomValidator,以显示带有ValidatorCalloutExtender的消息,asp.net,Asp.net,我在ASP.net中有一个页面,并在该页面中注册了UserControl 用户控件包含一个texbox、ajax calendarextender和rangeValidator,它们使文本框中的日期有效 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DatePicker.ascx.cs" Inherits="Root_Webspace.WebControls.DatePicker" %> <tabl

我在ASP.net中有一个页面,并在该页面中注册了UserControl

用户控件包含一个texbox、ajax calendarextender和rangeValidator,它们使文本框中的日期有效

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DatePicker.ascx.cs"
Inherits="Root_Webspace.WebControls.DatePicker" %>


<table>
<tr>
    <td  >
        <asp:RangeValidator ID="rvDate" runat="server" Text="!" ErrorMessage="Message..." ControlToValidate="txtDate"
            Type="Date" ></asp:RangeValidator>
        <ajx:ValidatorCalloutExtender ID="vcalSaleDateRange" runat="server" TargetControlID="rvDate">
                                    </ajx:ValidatorCalloutExtender>
    </td>
    <td >
        <asp:TextBox ID="txtDate"   runat="server"></asp:TextBox>
    </td>
    <td>
        <asp:ImageButton ID="imgbtnDate" runat="server" CausesValidation="false" ImageUrl="~/App_Themes/Default/Images/icon-calendar.gif" />
        <ajx:CalendarExtender ID="cextDate"  runat="server" PopupButtonID="imgbtnDate"
                                        TargetControlID="txtDate">
        </ajx:CalendarExtender>
    </td>
</tr>
</table>
该页面包含此用户控件和CustomValidator。 使用这个CustomValidator,我想将他的ControlToValidate设置为UserControl textDate

<%@ Page Title="" Language="C#" MasterPageFile="~/Masterpages/Default.Master" AutoEventWireup="true"
CodeBehind="Test.aspx.cs" Inherits="Root_Webspace.Test" UICulture="auto" Culture="auto"
Async="true" %>

<%@ Register Src="~/WebControls/DatePicker.ascx" TagName="DatePicker" TagPrefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSend" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="btnCancel" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <div>
            <asp:CustomValidator ID="cvalDate" runat="server" ControlToValidate="How to set with usercontrol txtDate ???? "
                Display="Dynamic" Text="!" OnServerValidate="cvalDate_ServerValidate" ValidateEmptyText="true"> </asp:CustomValidator>
            <ajx:ValidatorCalloutExtender ID="vcalDateBris" runat="server" TargetControlID="cvalDate">
            </ajx:ValidatorCalloutExtender>
            <uc1:DatePicker ID="FromDatePicker" runat="server" />
        </div>
          </ContentTemplate>
</asp:UpdatePanel>
<div>
    <div class="buttonzone">
        <div id="idButtons" style="margin-right: 5px;">
            <asp:Button ID="btnSend" runat="server" TabIndex="10" Text="Send" Width="85px" meta:resourcekey="btnSend"
                OnClick="btnSend_Click" />
            <asp:Button ID="btnCancel" runat="server" CausesValidation="false" TabIndex="11"
                Text="Cancel" OnClick="btnCancel_Click" Width="85px" meta:resourcekey="btnCancel" />
        </div>
    </div>
</div>
</asp:Content>
错误=>InnerException类型:System.Web.HttpException无法找到由“cvalDate”的“ControlToValidate”属性引用的控件id“txtDate”

当我更改为:cvalDate.ControlToValidate=FromDatePicker.TxtDate.ClientID

错误=>InnerException类型:System.Web.HttpException无法找到由“cvalDate”的“ControlToValidate”属性引用的控件id“ctl00\u ContentPlaceholder 1\u FromDatePicker\u txtDate”

如果我没有设置cvalDate.controlToValidate,vcalDateBris ValidatorCalloutExtender将在必须显示无效日期消息时失败,因为此ValidatorCalloutExtender通过TargetControlID链接到CustomValidator,而CustomValidator没有controlToValidate控件集。 所以,我如何将页面中CustomValidator的ControlToValidate设置为txtDate,谁在FromDatePicker USerControl中,以便在Validator Callout Extender中显示消息

有什么想法吗


问候

非常感谢,它很有效。在回答之前,我使用ContentPlaceholder 1$FromDatePicker$txtDate测试了控件的唯一ID。FromDatePicker$txtDate似乎是这个UniqueID的一部分。你知道为什么它会用唯一的ID来记录吗???
ControlToValidate="FromDatePicker$txtDate"
    protected void btnSend_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            //Do Something
        }
    }

    protected void cvalDate_ServerValidate(object source, ServerValidateEventArgs args)
    {
        cvalDate.ErrorMessage = string.Empty;
        args.IsValid = true;
        if (!IsDate(this.FromDatePicker.TxtDate.Text))
            cvalDate.ErrorMessage = Root.Resources.WebMessages.INVALIDDATE;
        else if (!string.IsNullOrEmpty(FromDatePicker.TxtDate.Text) && DateTime.Parse(FromDatePicker.TxtDate.Text) > DateTime.Now)
            cvalDate.ErrorMessage = Root.Resources.WebMessages.BIGGERTHAN;


        args.IsValid = string.IsNullOrEmpty(cvalDate.ErrorMessage);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            cvalDate.ControlToValidate = FromDatePicker.TxtDate.ID;
        }
    }
ControlToValidate="FromDatePicker$txtDate"