我有一个自定义字段迭代器,它在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。请帮助!!
答案 0 :(得分:1)
我必须先在客户端获取多行或人/人类型的自定义字段的值,然后将它们保存到我在服务器上访问的隐藏字段中。我不确定为什么这种行为发生在SharePoint 2013上,仅适用于多行或人/人,但这种解决方法解决了这个问题。