SharePoint 2013自定义列表字段迭代器不保存MultiLine或person列的值

时间:2015-06-10 22:02:24

标签: c# asp.net sharepoint sharepoint-2010 sharepoint-2013

我有一个自定义字段迭代器,它在2010年的自定义SharePoint表单上运行正常。但是,在SharePoint 2013中,它不会保存MultiLine和people列的值。放弃所有其他列(文本,数字,选择......等),它保存了价值。这就是我所拥有的:

 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;
                }
            }
        }
    }

//在ExtensionMethods类内部

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
  };
对于multiline或person / people类型的列,

formField.ItemFieldValue返回null。请帮助!!

1 个答案:

答案 0 :(得分:1)

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