SharePoint 2013 自定义列表字段迭代器不保存多行或人员列的值

SharePoint 2013 Custom list field iterator not saving values for MultiLine or person columns

我有一个自定义字段迭代器,它在 2010 年的自定义 SharePoint 表单上运行良好。但是,在 SharePoint 2013 中,它没有为 MultiLine 和人员列保存值。 Fow 所有其他列(文本、数字、选择...等)它会很好地保存值。这是我拥有的:

 protected void btnSave_Expense(object p_sender, EventArgs p_e)
   {

       SPListItem item = // Get SPListItem
       saveCustomFields (listitem);
    };


   private void saveCustomFields(SPListItem listitem)
    {
        for (int i = 0; i < listitem.Fields.Count; i++)
        {
            string fieldname = listitem.Fields[i].StaticName;
            if (!Enumerable.Contains(SPConstants.EtravelAndExpense_fields.ToArray(), fieldname))
            {
                FormField formField = ExtensionMethods.GetControlsOfType<FormField>(ListFieldIterator1.Controls).Where(f => f.FieldName == fieldname).FirstOrDefault();

                if (formField != null)
                {
                    object obj = formField.ItemFieldValue; //returns values for all fields except multiline or people.
                    listitem[fieldname] = obj;
                }
            }
        }
    }

// 内部扩展方法 class

public static List<T> GetControlsOfType<T>(this ControlCollection controls)
  {
        List<T> resultList = new List<T>();
        foreach (Control control in controls)
        {
            if (control is T)
                resultList.Add((T)((object)control));
            if (control.Controls.Count > 0)
            {
                resultList.AddRange(GetControlsOfType<T>(control.Controls));
            }
        }
        return resultList;
    }

//SPConstants数组字段。

public static string[] EtravelAndExpense_fields = new string[]
  {
        "Name",
        "Title",
        "Test",
         ..... //more fields
  };

formField.ItemFieldValue 用于多行类型的列或 person/people return 空。请帮忙!!

我必须首先在客户端获取多行或 person/people 类型的自定义字段的值,然后将它们保存到我在服务器上访问的隐藏字段。我不确定为什么这种行为发生在 SharePoint 2013 上并且仅适用于多行或 person/people,但此解决方法解决了该问题。