我正在开发自定义表单,用于将项目添加到sharepoint 2010自定义列表中。在我的add.aspx网站上,我使用以下网页控件:
<SharePoint:UserField runat="server" ID="Workers" ControlMode="New" FieldName="Workers"/>
<SharePoint:PeopleEditor runat="server" ID="Managers" ControlMode="New" FieldName="Managers"/>
因为您可以看到它们已连接到列表中的特定字段:
<Field ID="{1EE0732A-FDD7-4128-A112-BE136DB948D9}" Name="Workers" DisplayName="Workers" Type="UserMulti" Required="TRUE" Mult="TRUE"/>
<Field ID="{1A499D66-B23B-40E4-8306-AF40F9081729}" Name="Managers" DisplayName="Managers" Type="UserMulti" Required="TRUE" Mult="TRUE"/>
问题是,在我完成表单并单击“保存”按钮后,新项目将出现在列表中,但只有工作人员字段已完成。为什么它不适用于PeopleEditor控件(microsoft.sharepoint.webcontrols.peopleeditor)?我真的希望有一个工作,因为它有帐户集合,其中包含放在此控件中的所有域\ uid用户。如何让它工作或如何从Microsoft.SharePoint.WebControls.PeopleEditor这样的集合?我需要以某种方式获取这些值以在“保存”点击事件上执行服务器端验证。
顺便说一句。是否存在Web控件用于每种字段类型的信息?
即:
SharePoint:RadioButtonChoiceField - 选择
SharePoint:TextField - 文本
SharePoint:BooleanField - Boolean
答案 0 :(得分:0)
尝试使用FormField
它将为您采用默认控件模板,如果您有自定义字段,它也将采用自定义控件。
<SharePoint:FormField runat="server" id="fldTitle" FieldName="Title" ControlMode="New" />
编辑:在回复您的评论时,以下是解析用户字段值的正确方法:
private void ProcessUsers(SPListItem item, string fieldName)
{
string fieldValue = item[fieldName] as string;
SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue);
foreach(SPFieldUserValue uv in users)
{
SPUser user = uv.User;
// Process user
}