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