Как получить элемент управления ControlToValidate внутри функции проверки, когда функция проверки используется для нескольких элементов управления - PullRequest
1 голос
/ 07 ноября 2011

Хорошо,

Это кажется прямым, но у меня проблемы с поиском решения.

У меня есть 10 PeopleEditor элементов управления.Каждый из элементов управления PeopleEditor имеет CustomValidator, а для свойства ControlToValidate устанавливается конкретный элемент управления PeopleEditor.Я назначаю функцию элементу управления на основе критериев.

Возможно, одна и та же функция проверки назначена нескольким CustomValidator с, что, в свою очередь, означает, что функции необходимо знать, какой элемент управления ControlToValidate проверяет.

Это понятно?

Вопрос состоит в следующем: как ссылаться на элемент управления из свойства ControlToValidate в коде c # на стороне функции проверки?

Ниже приведены аналогичные проблемы, но они ссылаются на клиентскую или встроенную проверку: Как получить свойство 'controlToValidate' для ClientValidationFunction? и Извлечь значение из элемента управления в свойстве ControlToValidate в элементе управления CustomValidator?

ОБНОВЛЕНИЕ: У меня есть 10 из них на странице .aspx:

<asp:Label ID="lblPeople0" runat="server" />
<SharePoint:PeopleEditor ID="edtPeople0" SelectionSet="User,SecGroup" AutoPostBack="false" CausesValidation="false" PlaceButtonsUnderEntityEditor="false" Rows="3" AllowEmpty="true" ValidatorVisible="true" runat="server" MultiSelect="true" MaximumEntities="100" ShowCreateButtonInActiveDirectoryAccountCreationMode="true" />
<asp:CustomValidator id="vldPeople0" display="Dynamic" runat="server" ErrorMessage="Error Message." ControlToValidate="edtPeople0" />

На странице .aspx.cs я назначаю функцию проверки следующим образом:

vldPeople0.ServerValidate += new System.Web.UI.WebControls.ServerValidateEventHandler(validate_ThisAndThat);

Затем у меня есть этодля функции и нужно получить ControlToValidate, чтобы получить ResolvedEntities от него.

/// <summary>
/// Validation function.
/// </summary>
private void validate_ThisAndThat(Object source, ServerValidateEventArgs args)
{
  foreach (PickerEntity entity in (ControlToValidate).ResolvedEntities)
  {
    String tmpPrincipalType = (entity.EntityData["PrincipalType"]).ToString();

    if (tmpPrincipalType == "User")
    {
      if ((entity.EntityData["DisplayName"]).ToString().Contains("aString"))
      {
        args.IsValid = false;
      }
    }
  }
}

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Хорошо, поэтому ключом было присвоить атрибут CustomValidator ...

<asp:Label ID="lblPeople0" runat="server" />
<SharePoint:PeopleEditor ID="edtPeople0" SelectionSet="User,SecGroup" AutoPostBack="false" CausesValidation="false" PlaceButtonsUnderEntityEditor="false" Rows="3" AllowEmpty="true" ValidatorVisible="true" runat="server" MultiSelect="true" MaximumEntities="100" ShowCreateButtonInActiveDirectoryAccountCreationMode="true" />
<asp:CustomValidator id="vldPeople0" display="Dynamic" runat="server" ErrorMessage="Error Message." ControlToValidate="edtPeople0" />

На странице .aspx.cs я назначаю функцию проверки следующим образом:

vldPeople0.ServerValidate += new System.Web.UI.WebControls.ServerValidateEventHandler(validate_ThisAndThat);
vldPeople0.Attributes.Add("peopleEditor", "edtPeople0");

Тогда у меня есть это для функции.

private void validate_ThisAndThat(Object source, ServerValidateEventArgs args)
{
  CustomValidator thisValidator = (CustomValidator) source;
  string strPeopleEditor = (string)thisValidator.Attributes["peopleEditor"];
  PeopleEditor peopleEditor = (PeopleEditor)panel1.FindControl(strPeopleEditor);

  foreach (PickerEntity entity in peopleEditor.ResolvedEntities)
  {
    String tmpPrincipalType = (entity.EntityData["PrincipalType"]).ToString();

    if (tmpPrincipalType == "User")
    {
      if ((entity.EntityData["DisplayName"]).ToString().Contains("aString"))
      {
        args.IsValid = false;
      }
    }
  }
}
0 голосов
/ 07 ноября 2011

Да, это возможно сделать. Определение OnServerValidate может указывать на тот же метод (обработчик). Вы можете привести отправителя ServerValidateEventArgs, чтобы найти тип объекта и идентификатор. Альтернативно, предоставьте каждому валидатору свой собственный обратный вызов и определите центральный набор методов проверки, вызываемых из каждого обратного вызова. Таким образом, логика в общих методах вызывается для соответствующего обработчика.

НТН.

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