3

问题:如何正确地扩展自定义控件以使用RequiredFieldValidator?我读过this,但试图实施它并没有解决我的问题。 这是我想出迄今:'RequiredFieldValidator'引用的自定义控件无法验证

<%@ Register src="DynamicGenerator/Controls/ReferenceControl.ascx" tagname="ReferenceControl" tagprefix="uc1" %> 
    <uc1:ReferenceControl ID="SelectAgreement" runat="server" /> 
    <asp:RequiredFieldValidator ID="RequiredFieldValidator" ControlToValidate="SelectAgreement" runat="server" ErrorMessage="Select an agreement!"></asp:RequiredFieldValidator> 

后面的代码:

[ValidationProperty("ConceptDefinitionId")] 
public partial class ReferenceSelector : System.Web.UI.UserControl, IReference 
{ 
    //lots of other stuff 
public string ConceptDefinitionId 
     { 
      get { return ReferenceControl.ConceptDefinitionId ?? ""; } 
      set { ReferenceControl.ConceptDefinitionId = value; } 
     } 
} 

加载这个页面给了我以下错误:

控制“SelectAgreement”通过引用'RequiredFieldValidator'的ControlToValidate属性无法验证。

堆栈跟踪:

[HttpException (0x80004005): Control 'SelectAgreement' referenced by the ControlToValidate property of 'RequiredFieldValidator' cannot be validated.] 
    System.Web.UI.WebControls.BaseValidator.CheckControlValidationProperty(String name, String propertyName) +8739685 
    System.Web.UI.WebControls.BaseValidator.ControlPropertiesValid() +40 
    System.Web.UI.WebControls.BaseValidator.get_PropertiesValid() +21 
    System.Web.UI.WebControls.BaseValidator.OnPreRender(EventArgs e) +27 
    System.Web.UI.Control.PreRenderRecursiveInternal() +80 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Control.PreRenderRecursiveInternal() +171 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842 
+0

你的代码看起来我的权利。我得到这个问题有同样的问题,除了我错过了'ValidationPropertyAttribute'。只要我添加了_(我的属性是只读的并返回'int',作为比较)_它按预期工作。 – JMD 2016-04-12 20:11:14

回答

3

你将需要把用户控件内RequiredFieldValidator和验证一个特定的控制就像一个TextBoxDropDown,因为验证只允许在相同的命名容器,并在你的情况下,用户控件是不同的容器,所以这是行不通的。

另一种方法可以使用ValidationPropertyAttribute

+1

我已经在使用ValidationPropertyAttribute(请参阅代码隐藏),但我想我以错误的方式使用它? – 2011-05-12 11:36:16

+0

尝试更改'EnableClientScript'属性 – V4Vendetta 2011-05-12 11:37:58

+0

试图在RequiredFieldEditor上将它设置为true和false,但没有结果。 – 2011-05-12 11:46:46

相关问题