2010-10-12 25 views
6

Tôi có ba hộp văn bản trên biểu mẫu web asp.net, cách/tôi có thể sử dụng trình xác thực trường bắt buộc để đảm bảo rằng ít nhất một hộp văn bản có chứa văn bản không?Trình xác thực trường bắt buộc asp.net cho ít nhất một hộp văn bản chứa văn bản

+0

bản sao có thể có của [asp.net validate textbox - ít nhất một hộp văn bản phải có dữ liệu trong] (http://stackoverflow.com/questions/1443545/asp-net-validate-textbox-at-least-one- text-box-must-have-data-in) –

Trả lời

15

Tôi sẽ sử dụng một CustomFieldValidator như thế này:

<asp:CustomValidator runat="server" 
     ID="MyCustomValidator" 
     ValidationGroup="YOUR_VALIDATION_GROUP_NAME" 
     OnServerValidate="MyCustomValidator_ServerValidate" 
     ErrorMessage="At least one textbox needs to be filled in." /> 

và sau đó trong codebehind của bạn, bạn có:

protected void MyCustomValidator_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    if (/* one of three textboxes has text*/) 
     args.IsValid = true; 
    else 
     args.IsValid = false; 
} 

Bạn cũng có thể thêm một thành phần Client-side để xác nhận điều này, và làm cho nó gợi cảm bằng cách mở rộng nó bằng kiểm soát ValidatorCalloutExtender của bộ công cụ AJAX.

+0

Tôi không thích rằng điều này gây ra một postback vì vậy tôi vừa kết thúc thiết lập ClientIDMode = "tĩnh" và cứng mã hóa các giá trị trong một hàm JS. Tôi đã không thực sự quan tâm đến việc làm bất kỳ thông báo lỗi hoặc bất cứ điều gì; Tôi chỉ muốn nút không làm gì cả. Cảm ơn mã. Nó hoàn toàn làm việc, nó chỉ sử dụng một CustomValidator là sự lựa chọn sai. Đó là lỗi của tôi, không phải của bạn. – Shawn

+0

Tôi thấy điều này sẽ không kích hoạt xác thực với một ValidationGroup được chỉ định. Khi tôi lấy nó ra, nó hoạt động như một sự quyến rũ. – techturtle

13

Tôi không nghĩ rằng trình điều khiển RequiredFieldValidator phù hợp với yêu cầu của bạn. Tôi sẽ đi với một CustomValidator giao cho bất kỳ lĩnh vực của bạn và tự kiểm tra tất cả khi nó cháy.

<script> 
    function doCustomValidate(source, args) { 

     args.IsValid = false; 

     if (document.getElementById('<% =TextBox1.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
     if (document.getElementById('<% =TextBox2.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
     if (document.getElementById('<% =TextBox3.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
    } 
</script> 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<asp:CustomValidator ID="CustomValidator1" runat="server" 
     ErrorMessage="have to fill at least 1 field" 
     ControlToValidate="TextBox1" 
     ClientValidationFunction="doCustomValidate" 
     ValidateEmptyText="true" ></asp:CustomValidator><br /> 
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /> 

Đừng quên đặt ValidateEmptyText="true" làm mặc định là bỏ qua các trường trống. đảm bảo bạn cũng tạo phương thức xác thực phía máy chủ tương tự.

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