C# 当一个验证函数用于多个控件时,如何在验证函数内获取ControlToValidate控件

C# 当一个验证函数用于多个控件时,如何在验证函数内获取ControlToValidate控件,c#,asp.net,sharepoint,validation,C#,Asp.net,Sharepoint,Validation,嗯 这似乎是直截了当的,但我很难找到解决办法 我有10个PeopleEditor控件。每个PeopleEditor控件都有一个CustomValidator,并且ControlToValidate属性被设置为特定的PeopleEditor控件。我根据标准为控件分配一个函数 可能会将同一验证功能分配给多个CustomValidators,这意味着该功能需要知道要验证的ControlToValidate控件 清楚了吗 问题是: 如何从验证函数服务器端c#code中的ControlToValidate

这似乎是直截了当的,但我很难找到解决办法

我有10个
PeopleEditor
控件。每个
PeopleEditor
控件都有一个
CustomValidator
,并且
ControlToValidate
属性被设置为特定的
PeopleEditor
控件。我根据标准为控件分配一个函数

可能会将同一验证功能分配给多个
CustomValidator
s,这意味着该功能需要知道要验证的
ControlToValidate
控件

清楚了吗

问题是: 如何从验证函数服务器端c#code中的
ControlToValidate
属性中引用控件

以下是类似的问题,但它们涉及客户端或内联验证: 及

更新: 我在
.aspx
页面中有10个:

<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" />
<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" />
然后,我将其用于函数,需要获取
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;
      }
    }
  }
}
//
///验证功能。
/// 
private void validate_thisandth(对象源、服务器ValidateEventargs args)
{
foreach(在(ControlToValidate.ResolvedEntities)中的PickerEntity实体)
{
字符串tmpPrincipalType=(entity.EntityData[“PrincipalType”]).ToString();
如果(tmpPrincipalType==“用户”)
{
if((entity.EntityData[“DisplayName”]).ToString()包含(“aString”))
{
args.IsValid=false;
}
}
}
}

是的,这是可能的。OnServerValidate定义可以指向相同的方法(处理程序)。您可以强制转换ServerValidateEventArgs的发送方以查找对象类型和ID。或者,为每个验证器提供自己的回调,并定义从每个回调调用的一组中心验证方法。这样,逻辑是通用的,方法是为适当的处理程序调用的


HTH.

好的,所以关键是为
CustomValidator分配一个属性

然后,我有这个函数

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;
      }
    }
  }
}

布莱恩。我真的很感激你的回答,但我不明白。。。也许我需要澄清我的答案。。。
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;
      }
    }
  }
}