Пользовательский элемент управления, на который ссылается RequiredFieldValidator, не может быть проверен - PullRequest
3 голосов
/ 12 мая 2011

Вопрос: Как правильно расширить пользовательский элемент управления для работы с 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», на который ссылается свойство ControlToValidate объекта «RequiredFieldValidator», не может быть проверен.

StackTrace:

[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

1 Ответ

3 голосов
/ 12 мая 2011

Вам нужно будет поместить RequiredFieldValidator в UserControl и проверить определенный элемент управления, такой как TextBox или DropDown, поскольку валидаторы разрешены только в одном и том же контейнере именования, а в вашем случае UserControl - это другой контейнертак что это не сработает.

Другим способом может быть использование ValidationPropertyAttribute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...