2011-01-13 21 views

Trả lời

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> 

Thêm phần này vào code-behind (cũng sửa đổi đánh dấu một chút để đăng ký vào một sự kiện, xem ở trên) :

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

đây là không làm việc dude – sumit

+0

Bạn có thể xây dựng? Chính xác thì không làm việc là gì? Nó hoạt động tốt cho tôi (chỉ cần thử nghiệm). Bạn không nhận được thông báo lỗi khi bạn cố gửi và trống trường? – volpav

+0

có làm việc của nó ... – ogun

2

Bạn có thể đặt giá trị ControlToValidate trên repeater itemdatabound.

+0

tôi đã thử điều này nhưng không có kết quả – sumit

+0

onitemdatabound nhận được textbox.clientid và hơn thiết lập này kiểm soát validators ... – ogun

1

Hãy thử điều này một

<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

điều này cũng không làm việc – sumit

+0

u có thể giải thích cho tôi như thế nào u thực hiện giải pháp này trên your.Its làm việc tốt trên của tôi bên (KIỂM TRA).Nếu u bấm vào nút gửi nó hiển thị lỗi msg cùng với textbox control.Can u viết mã của bạn trong câu hỏi. – 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

Nếu bạn muốn tất cả các hộp thoại trong một repeater để được xác nhận bởi một nút bấm duy nhất sau đó thats đơn giản như thế này

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

Không cần phải kiểm tra bất kỳ sự kiện cho databound hoặc bất cứ điều gì.

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

Có lẽ bạn muốn có một xác nhận cho mỗi hàng ... Đặt nhóm xác nhận cho một nhóm mỗi dòng như thế này

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

làm điều này trong validator, hộp và nút

HTH G.

0

Tôi tiếp tục nhận được ngoại lệ khóa trùng lặp trong RegisterExpandoAttribute cố gắng thực hiện việc này. Tôi đã sử dụng một UserControl bên trong một repeater, khi "OnDataBinding" thay vì "ItemDataBinding" này đã làm việc cho tôi:

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

Và vâng, tôi không nghĩ rằng nó làm cho bất kỳ ý nghĩa hoặc

Các vấn đề liên quan