3

質問: 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; }
        }
}

このページを読み込むと、次のエラーが表示されます。

「RequiredFieldValidator」の ControlToValidate プロパティによって参照されるコントロール「SelectAgreement」を検証できません。

スタックトレース:

[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
4

1 に答える 1

3

RequiredFieldValidatorをUserControl 内に配置し、TextBoxまたはのような特定のコントロールを検証する必要がありますDropDown。バリデーターは同じ名前付けコンテナーでのみ許可されており、この場合、UserControl は別のコンテナーであるため、これは機能しません。

別の方法はValidationPropertyAttributeを使用することです

于 2011-05-12T11:31:24.657 に答える