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,但此解决方法解决了该问题。
我有一个自定义字段迭代器,它在 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,但此解决方法解决了该问题。