Possible to validate between INamingContainers in 2.0?

Discussion in 'ASP .Net Building Controls' started by daokfella, Jun 7, 2007.

  1. daokfella

    daokfella Guest

    I have a composite control that contains a texbox and comparevalidator
    (and other stuff not applicable to this post). Right now, it does a
    simple DataTypeCheck or any comparison to the ValueToCompare property.
    I've exposed the ValueToCompare and the CompareOperator properties.
    The control is for a date, so the Type property is permanently set as
    Date.

    I'd like to expose the ControlToCompare property, but it won't work
    because I'll always get the "Cannot find the control referenced by the
    ControlToCompare property (paraphrased)". I'm assuming this is because
    the two compared controls are in different INamingContainers.

    Has anybody found a workaround? I'd like for my custom controls to be
    able to be compared against each other. My short term workaround is
    allowing for the internal compare operator to be disabled, and then
    just using new comparevalidators on the page between the two controls.

    Also, when setting the ValidationCompare attribute in my custom
    control, this control id is shown in the dropdown for another's
    ControlToCompare property. Unfortunately, this is the id of the top
    level <span> container and not the textbox within the
    compositecontrol. I thought that was the problem, but even after
    exposing the textbox ClientId and using that as the ControlToCompare,
    it still didn't work.

    Thanks,

    Jason
     
    daokfella, Jun 7, 2007
    #1
    1. Advertising

  2. daokfella

    Teemu Keiski Guest

    It should be if you assign UniqueID to the ControlToValidate property. As
    validator uses FindControl to locate the control to be validated, it can
    find it on other naming containers if the given id is unique id (exposing
    the full containment hierarchy of the control)

    Assuming I have a user control, WebUserConntrol1.ascx and it's code-behind

    <%@ Control Language="vb" AutoEventWireup="false"
    CodeBehind="WebUserControl1.ascx.vb"
    Inherits="CSTestApplication1.WebUserControl1" %>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    Public Partial Class WebUserControl1
    Inherits System.Web.UI.UserControl

    Public ReadOnly Property TheBox() As TextBox
    Get
    Return TextBox1
    End Get
    End Property

    End Class

    And using it on aspx

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb"
    Inherits="CSTestApplication1.WebForm1" %>
    <%@ Register Src="WebUserControl1.ascx" TagName="WebUserControl1"
    TagPrefix="uc1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>Untitled Page</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="Button1" runat="server" Text="Button" />
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1"
    runat="server"
    ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
    <uc1:WebUserControl1 ID="UC1" runat="server" />
    </div>
    </form>
    </body>
    </html>

    And relevant code to set the UNiqueID

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As
    System.EventArgs) Handles Me.Load
    Me.RequiredFieldValidator1.ControlToValidate =
    Me.UC1.TheBox.UniqueID
    End Sub


    --
    Teemu Keiski
    AspInsider, ASP.NET MVP
    http://blogs.aspadvice.com/joteke
    http://teemukeiski.net

    "daokfella" <> wrote in message
    news:...
    >I have a composite control that contains a texbox and comparevalidator
    > (and other stuff not applicable to this post). Right now, it does a
    > simple DataTypeCheck or any comparison to the ValueToCompare property.
    > I've exposed the ValueToCompare and the CompareOperator properties.
    > The control is for a date, so the Type property is permanently set as
    > Date.
    >
    > I'd like to expose the ControlToCompare property, but it won't work
    > because I'll always get the "Cannot find the control referenced by the
    > ControlToCompare property (paraphrased)". I'm assuming this is because
    > the two compared controls are in different INamingContainers.
    >
    > Has anybody found a workaround? I'd like for my custom controls to be
    > able to be compared against each other. My short term workaround is
    > allowing for the internal compare operator to be disabled, and then
    > just using new comparevalidators on the page between the two controls.
    >
    > Also, when setting the ValidationCompare attribute in my custom
    > control, this control id is shown in the dropdown for another's
    > ControlToCompare property. Unfortunately, this is the id of the top
    > level <span> container and not the textbox within the
    > compositecontrol. I thought that was the problem, but even after
    > exposing the textbox ClientId and using that as the ControlToCompare,
    > it still didn't work.
    >
    > Thanks,
    >
    > Jason
    >
     
    Teemu Keiski, Jun 13, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Markus
    Replies:
    1
    Views:
    483
    Markus
    Nov 22, 2005
  2. light of mind. heavy of belly

    Validate between 2 textboxes

    light of mind. heavy of belly, Jun 3, 2006, in forum: ASP .Net
    Replies:
    5
    Views:
    450
    light of mind. heavy of belly
    Jun 3, 2006
  3. Replies:
    0
    Views:
    1,282
  4. Tony Girgenti
    Replies:
    6
    Views:
    2,176
    mark4asp
    Mar 28, 2007
  5. Replies:
    4
    Views:
    429
    Joe Smith
    Jan 5, 2009
Loading...

Share This Page