2011-01-13 23 views

Respuesta

9
<asp:Repeater id="myRep" OnItemDataBound="rep_ItemDataBound" runat="server"> 
    <ItemTemplate> 
     <asp:TextBox id="tx" runat="server" /> 
     <asp:RequiredFieldValidator id="myVal" ControlToValidate="tx" ErrorMessage="Required" runat="server" /> 
    </ItemTemplate> 
</asp:Repeater> 

ACTUALIZACIÓN

añadir esto a código subyacente (también modificar el marcado de un poco de suscribirse a un evento, véase más arriba) :

protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    RequiredFieldValidator val = (RequiredFieldValidator)e.Item.FindControl("myVal"); 
    TextBox tb = (TextBox)e.Item.FindControl("tx"); 

    val.ControlToValidate = tb.ID; 
} 
+0

esto es no trabaja amigo – sumit

+0

¿Podría elaborar? ¿Qué es exactamente lo que no funciona? Funciona bien para mí (recién probado). ¿No recibe un mensaje de error cuando intenta enviar y vaciar el campo? – volpav

+0

sí está trabajando ... – ogun

2

Puede establecer el valor de ControlToValidate en el elemento de repetición indicado en la fecha.

+0

He intentado esto también, pero no hay resultados – sumit

+0

onitemdatabound get textbox.clientid y que establezca este su atributo de control de validadores ... – ogun

1

Prueba este

<asp:Repeater ID="rptSample" runat="server"> 
    <ItemTemplate> 
     Name:<br /> 
     <asp:TextBox ID="txtName" runat="server"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="rfvName" ControlToValidate="txtName" runat="server" Display="Static" ErrorMessage="Name field cannot be left blank"></asp:RequiredFieldValidator> 
    </ItemTemplate> 
</asp:Repeater> 
<br /> 
<asp:Button ID="btnSubmit" Text="Submit" runat="server" /> 
+0

esto tampoco funciona – sumit

+0

¿Puede explicarme cómo implementar esta solución en su lado? Está funcionando bien en mi lado (PROBADO).Si hace clic en el botón de enviar, muestra el mensaje de error junto con el control del cuadro de texto. Puede escribir su código en cuestión. – Sukhjeevan

0
protected void myRep_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     ((RequiredFieldValidator)e.Item.FindControl("myVal")).ValidationGroup = ((TextBox)e.Item.FindControl("tx")).UniqueID; 
    } 
} 
5

Si desea que todos los cuadros de texto en un repetidor para ser validado por un solo clic de botón entonces eso es tan simple como este

<asp:Repeater ID="rpt" runat="server"> 
    <ItemTemplate> 
     <asp:TextBox ID="txt" runat="server"> 
     </asp:TextBox> 
     <asp:RequiredFieldValidator ID="rqf" ControlToValidate="txt" 
     ErrorMessage="*" ValidationGroup = "TestValidationGroup" runat = "server"> 
     </asp:RequiredFieldValidator> 
    </ItemTemplate> 
    </asp:Repeater> 
    <asp:Button ID = "btnSubmit" runat = "server" ValidationGroup = "TestValidationGroup" /> 

No hay necesidad de comprobar si hay cualquier evento para databound o cualquier cosa.

0
protected void Repeater_OnItemDataBound(object sender, RepeaterItemEventArgs e) { 
    tblData tbldata = e.Item.DataItem as tblData; 

    RequiredFieldValidator val = (RequiredFieldValidator)e.Item.FindControl("rfv"); 

    if (tbldata.FieldName.ToUpper().Contains("NOT NULL")) { 
     TextBox tb = (TextBox)e.Item.FindControl("txtDATFieldName"); 
     val.ControlToValidate = tb.ID; 
    } 
    else { 
     val.Enabled = false; // disable when you dont need a validator 
    } 
} 
0

Tal vez usted quiere tener una validación por fila ... Configurar el grupo de validación a un grupo por cada fila como esta

ValidationGroup='<%# "gropname" + Eval("Id") %>' 

hacer esto en el validador, cuadro de texto y el botón

HTH G.

0

Obtuve una excepción de clave duplicada en RegisterExpandoAttribute tratando de hacer esto. que estaba usando un control de usuario dentro de un repetidor, cuando "OnDataBinding" en lugar de "ItemDataBinding" Esto funcionó para mí:

/// <summary> 
/// Raises the <see cref="E:System.Web.UI.Control.DataBinding" /> event. 
/// </summary> 
/// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> 
protected override void OnDataBinding(EventArgs e) 
{ 
    base.OnDataBinding(e); 
    foreach (Control ct in this.Controls) 
    { 
     BaseValidator bv = ct as BaseValidator; 
     if (null == bv) 
     { 
      continue; 
     } 
     bv.ControlToValidate = this.FindControl(bv.ControlToValidate).ID; 
     bv.ValidationGroup = this.ValidationGroup; 
    } 
} 

Y sí, no creo que tenga sentido, ya sea

Cuestiones relacionadas