Validation 在SharePoint中调用EnsureUser后,如何从People Picker控件获取电子邮件地址?

Validation 在SharePoint中调用EnsureUser后,如何从People Picker控件获取电子邮件地址?,validation,sharepoint-2010,controls,peoplepicker,Validation,Sharepoint 2010,Controls,Peoplepicker,我在一个页面上有一个人员选择器和标签,一旦我确保用户在Active Directory中可用,我需要将用户的电子邮件地址绑定到标签控件。这方面的代码需要写在哪里?是否应该在PageLoad()事件处理程序中?是的,您可以像下面这样访问对象(其中包含): var accountName = peoplePicker.Accounts[0]; //this will create a new account on SharePoint if a user with the given accoun

我在一个页面上有一个人员选择器和标签,一旦我确保用户在Active Directory中可用,我需要将用户的电子邮件地址绑定到标签控件。这方面的代码需要写在哪里?是否应该在PageLoad()事件处理程序中?

是的,您可以像下面这样访问对象(其中包含):

var accountName = peoplePicker.Accounts[0];

//this will create a new account on SharePoint if a user with the given accountName does not exist
var user = web.EnsureUser(accountName); 

lblEmail = user.Email;
peoplePicker显然是peoplePicker控件,web是您所在的当前web的一个实例(您也可以使用的web)

当您在人员选取器中输入用户名并按enter键时,不会触发特定事件,但是您可以将AutoPostback属性设置为true,然后触发一个通用回发,您可以通过Page_Load处理该回发

在标记中定义PeoplePicker,如下所示:

<SharePoint:PeopleEditor AutoPostBack="true" ID="peUser" runat="server" />

在页面加载中,您只需使用accounts属性检查人员选择器是否持有一个(或多个,视情况而定)帐户,然后执行任务


希望这有帮助如果您只需要电子邮件地址,这应该可以:

if (pectrl.ResolvedEntities.Count > 0)
{
    PickerEntity pe = (PickerEntity)pectrl.ResolvedEntities[0];
    string email = pe.EntityData[PeopleEditorEntityDataKeys.Email].ToString();
}

谢谢,我需要在哪里写这段代码。一旦用户确认它应该在另一个标签中填充电子邮件。如果(Page.IsPostBack){if(peopleEditor.IsValid){for(int i=0;iaccountName必须标识为字符串变量,因此必须在
帐户[0]
的末尾添加
.ToString()
,以便将其传递到
.EnsureUser()中
。没错,accountName必须是string类型。但是,peoplePicker.Accounts无论如何都应该返回string类型的ArrayList,因此无需调用其他.ToString()。很高兴它对您有效:)