【问题标题】:Sharepoint 2013, get data from list to ClientPeoplePickerSharepoint 2013,从列表中获取数据到 ClientPeoplePicker
【发布时间】:2016-01-02 03:34:04
【问题描述】:

在 Sharepoint 2013 中, 我试图从自定义列表中获取用户信息以显示在编辑表单中,这将显示在控件 ClientPeoplePicker 中。

我四处搜索并尝试了 2 个解决方案:

private void LoadUserToPeoplePicker(SPListItem item, string colName, ClientPeoplePicker peoplePicker)
    {
        //Get user information from list
        var user = item[colName] as string;

        if (!string.IsNullOrEmpty(user))
        {
            var spUser = new SPFieldUserValue(SPContext.Current.Web, user);

            //Solution 01
            var entity = new PickerEntity();
            entity.Key = spUser.LookupValue;

            PeopleEditor editor = new PeopleEditor();
            entity = editor.ValidateEntity(entity);

            peoplePicker.AddEntities(new List<PickerEntity> { entity });

            //Solution 02
            //if (!string.IsNullOrEmpty(spUser.User.Email))
            //{
            //    peoplePicker.InitialUserAccounts = spUser.User.Email;
            //}
        }
    }

我在 Nintex 表单的覆盖中调用它们:protected override void OnFormControlDataBinding(object sender, EventArgs e)

这是我得到的错误:

在程序集“Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”中键入“Microsoft.SharePoint.SPUser”未标记为可序列化。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Runtime.Serialization.SerializationException:在程序集“Microsoft.SharePoint,版本=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”中键入“Microsoft.SharePoint.SPUser”未标记为可序列化。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。

堆栈跟踪:

[SerializationException:在程序集“Microsoft.SharePoint,版本=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”中的类型“Microsoft.SharePoint.SPUser”未标记为可序列化。] System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型)+14210117 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型类型,StreamingContext 上下文)+408 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +420 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器,ObjectWriter objectWriter,SerializationBinder binder)+532 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文,SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器,ObjectWriter objectWriter,SerializationBinder binder)+270 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +814 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +322 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) +17 System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +3526

[ArgumentException:错误序列化“Microsoft.SharePoint.SPUser.”类型的值“i:0#.w|fsoft.fpt.vn\hoavt2”] System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +4068 System.Web.UI.ObjectStateFormatter.Serialize(对象状态图,目的用途)+103 System.Web.UI.Util.SerializeWithAssert(IStateFormatter2 格式化程序,对象状态图,目的用途)+67 System.Web.UI.HiddenFieldPageStatePersister.Save() +173 System.Web.UI.Page.SaveAllState() +1161 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4660

有人遇到这个问题,请帮忙。

【问题讨论】:

    标签: c# sharepoint sh


    【解决方案1】:

    我发现我错了:) 它不在那个函数中,它在另一个函数中

    private void ExtractValueForApprover(IOrderedDictionary dictionary, ClientPeoplePicker peoplePicker,
            string colName)
        {
            if (peoplePicker == null || string.IsNullOrEmpty(colName))
            {
                return;
            }
    
            if (peoplePicker.ResolvedEntities.Count > 0)
            {
                var user = SPContext.Current.Web.EnsureUser(peoplePicker.GetPickerEntity().Key);
    
                AddValueToDictionary(colName, user.LoginName, dictionary);
            }
        }
    

    我将这一行:SPContext.Current.Web.EnsureUser(peoplePicker.GetPickerEntity().Key) 提取到扩展方法,然后发生上述错误。

    这可能对你们有帮助。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2015-11-30
      • 2023-03-24
      相关资源
      最近更新 更多