2011-01-13 3 views

ответ

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> 

UPDATE

Добавить это код-за (также изменить разметку немного, чтобы подписаться на событие, смотри выше) :

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

это не работает чувак – sumit

+0

Не могли бы вы уточнить? Что именно не работает? Он отлично работает для меня (просто протестирован). Не пытаетесь ли вы получать сообщения об ошибках при отправке и пустом поле? – volpav

+0

да его работа ... – ogun

2

Вы можете установить значение ControlToValidate на значение привязки элемента ретранслятора.

+0

Я тоже пробовал это, но никаких результатов – sumit

+0

onitemdatabound получить textbox.clientid и установить этот атрибут управления валидаторами ... – ogun

1

Попробуйте один

<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

это тоже не работает – sumit

+0

Можете ли вы объяснить мне, как вы реализуете это решение на своей стороне. Он отлично работает на моем сторона (испытано).Если вы нажмете кнопку отправки, отобразите сообщение об ошибке msg рядом с элементом управления текстовым полем. Можете написать свой код. – 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

Если вы хотите, чтобы все текстовые поля в ретранслятор быть подтверждено одним нажатием кнопки, то тот просто как этот

<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" /> 

Нет необходимости проверять любое событие для привязки данных или чего-либо еще.

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

Может быть, вы хотите иметь проверки для каждой строки ... Установите группу проверки в группу для каждой строки, как этот

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

сделать это в валидатор, текстовое поле и кнопка

HTH G.

0

Я продолжал получать дублирующее ключевое исключение в RegisterExpandoAttribute, пытаясь это сделать. я использую UserControl внутри ретранслятора, когда «OnDataBinding» вместо «ItemDataBinding» Это работает для меня:

/// <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; 
    } 
} 

И да, я не думаю, что это имеет смысл либо

Смежные вопросы