2010-11-05 85 views
5

我有一个围绕DropDownList的包装UserControl控件,用于在DropDownList值上管理特定于语言的翻译。ASP.NET - 在UserControl中验证控件

我也有一个必需的字段验证器,需要内部下拉列表。

如何通过usercontrol公开此控件以允许验证?

我目前得到的错误如下:

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

编辑: 现在,我使用...

[ValidationPropertyAttribute("SelectedValue")] 

....随着

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

如果我在回发中检查页面的IsValid属性,现在正在工作。

回答

5

您的验证器应位于UserControl内部,但可从页面访问。

或者设置ValidationProperty在用户控件

  1. 将验证该用户控件内。它可以访问数据录入控件的ID号 。
  2. 使用CustomValidator。不要使用它的ControlToValidate属性。 相反,在您自己的评估 函数中,您将通过UserControl访问 DropDownList。 您可能会将 DropDownList字段公开,因此可以在您将类型为UserControl 的对象转换为该类的 UserControl时看到 。
  3. 它可能使用ValidationPropertyAttribute。 您需要将属性添加到您的 usercontrol,该属性返回数据的字符串值 。

找到here

+0

感谢ValidationProperty的工作,我忘了这只会发生在服务器端,要求我检查回发页面的IsValid属性。 – cweston 2010-11-05 15:21:17

+0

谢谢,“不要使用它的ControlToValidate属性”为我做了。 – JanBorup 2018-01-03 15:45:23

1

我处理这个问题有点不同于上面提出的建议。这是从我的代码中提取的代码片段:

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

VB.NET代码,但应该很容易弄清楚。