Era da un pò che pensavo al modo in cui poter utilizzare il controllo web SPFieldUser al di fuori di una form di inserimento e/o modificata di una lista Sharepoint, perchè mi piaceva mantere l'utilizzo del pop-up di ricerca utenti e gruppi. Solamente che, in pratica, se messo in una pagina diversa da NewForm.aspx e da EditForm.aspx, tale controllo in fase di rendering fa andare in eccezione tutta la pagina.
Il problema è che sbagliavo proprio controllo... si deve utilizzare il PeopleEditor, in grado proprio di fare da campo di testo per la ricerca di utenti e gruppi:
<SharePoint:PeopleEditor id="utentiPrivati" runat="server"
SelectionSet="User,SecGroup,SPGroup"
ValidatorEnabled="true"
AllowEmpty = "false"
MultiSelect = "true" />
Se vogliamo far selezionare solo utenti, diamo solamente il valore User alla proprietà SelectionSet, mentre se volgiamo far selezionare solo gruppi, diamo il valore SPGroup.
Lato server, è possibile recuperare le informazioni da tale controllo in questo modo:
SPUser user = null;
SPGroup group = null;
for (int i = 0; i < utentiPrivati.Accounts.Count; i++)
{
string account = utentiPrivati.Accounts[i].ToString();
try
{
//account: DOMAIN\loginname user = web.AllUsers[account];
}
catch
{
//account: GroupName group = web.Groups[account];
}
}