2010-11-05 35 views
5

Tôi có một điều khiển UserControl bao quanh một DropDownList để quản lý ngôn ngữ dịch cụ thể trên các giá trị DropDownList.ASP.NET - Validating Control Bên trong UserControl

Tôi cũng có trình xác thực trường bắt buộc được yêu cầu lại cho danh sách thả xuống bên trong.

Làm cách nào để hiển thị kiểm soát này thông qua điều khiển người dùng để cho phép xác thực?

Các lỗi Tôi hiện đang nhận được như sau:

... cannot be validated. at System.Web.UI.WebControls.BaseValidator.CheckControlValidationProperty(String name, String propertyName) 
     at System.Web.UI.WebControls.BaseValidator.ControlPropertiesValid() 

Edit: bây giờ tôi đang sử dụng ...

[ValidationPropertyAttribute("SelectedValue")] 

.... Với

public string SelectedValue 
{ 
    get { return cboI18nItems.SelectedValue; } 
} 

Mà hiện đang làm việc nếu tôi kiểm tra tài sản IsValid của trang trên postback.

Trả lời

5

Trình xác thực của bạn phải nằm trong UserControl nhưng có thể truy cập được từ trang.

Hoặc thiết lập ValidationProperty trên UserControl

  1. Đặt validator bên trong UserControl. Nó có thể truy cập ID của điều khiển nhập dữ liệu.
  2. Sử dụng Trình xác thực tùy chỉnh. Không sử dụng thuộc tính ControlToValidate của nó. Thay vào đó, trong chức năng đánh giá của riêng bạn , bạn sẽ truy cập vào DropDownList thông qua UserControl. Bạn có thể sẽ tạo trường DropDownList Công khai để nó có thể là được thấy khi bạn đã nhập đối tượng UserControl vào lớp học đó UserControl.
  3. Có thể sử dụng thuộc tính ValidationPropertyAttribute. Bạn cần thêm thuộc tính vào bộ điều khiển người dùng trả về một chuỗi giá trị của dữ liệu.

Tìm thấy here.

+0

Cảm ơn ValidationProperty đã hoạt động, tôi đã quên rằng điều này sẽ chỉ xảy ra trên máy chủ, yêu cầu tôi kiểm tra thuộc tính IsValid của trang trên postback. – cweston

+0

Cảm ơn, "Không sử dụng thuộc tính ControlToValidate" đã làm điều đó cho tôi. – JanBorup

1

Tôi xử lý sự cố này hơi khác so với những gì được đề xuất ở trên. Dưới đây là đoạn mã được lấy từ mã của tôi:

Protected Sub ValidateCreditCard() 
    Dim validators = Page.GetValidators("cc") 
    For Each v In validators 
     DirectCast(v, BaseValidator).Validate() 
    Next 
End Sub 

Mã VB.NET nhưng phải dễ tìm ra.

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