我正在以编程方式将元素添加到自定义列表中,其中包含来自C#代码的自定义列:
// Get the list
var context = SPContext.Current;
var web = context.Site.RootWeb;
web.AllowUnsafeUpdates = true;
var favoritesList = web.Lists["Favoritter"];
// Check if new item already exists
var query = new SPQuery
{
Query = string.Format(
"<Where>" +
"<And>" +
"<Eq><FieldRef Name='Brugernavn'/><Value Type='Text'>{0}</Value></Eq>" +
"<And>" +
"<Eq><FieldRef Name='Fagomr_x00e5_de'/><Value Type='Text'>{1}</Value></Eq>" +
"<Eq><FieldRef Name='N_x00f8_gletalsnummer'/><Value Type='Text'>{2}</Value></Eq>" +
"</And>" +
"</And>" +
"</Where>", GetUserName(false), omraade, noegletalsId)
};
var items = favoritesList.GetItems(query);
if (items.Count > 0)
return false;
// Otherwise add the new item
var favorite = favoritesList.Items.Add();
favorite["Brugernavn"] = GetUserName(false);
favorite["Fagomr_x00e5_de"] = omraade;
favorite["N_x00f8_gletalsnummer"] = noegletalsId;
favorite.Update(); // <--- THIS LINE THROWS EXCEPTION
web.AllowUnsafeUpdates = false;
return true;
当我对新项目执行Update()
命令时,抛出以下异常:
Microsoft.SharePoint.SPException:
Invalid URL value. A URL field contains invalid data. Please check the value and try again
我制作的三个自定义列都是SPFieldText
类型,因此没有来处理网址。
我还使用PowerShell隐藏了默认的标题字段:
$titleField = $favoritesList.Fields.GetField("Title")
$titleField.LinkToItem = $false
$titleField.Required = $false
$titleField.Hidden = $true
$titleField.Update()
可以找到列表的XML架构here。
答案 0 :(得分:1)
如何检查列表变量(favoritesList)是否包含对您尝试访问的列表的引用。
最好使用SPWeb.Lists.TrygetList(http://msdn.microsoft.com/library/office/microsoft.sharepoint.splistcollection.trygetlist.aspx)而不是使用web.Lists []。如果找不到特定列表,TrygetList将返回null,这样您就可以确保favoritesList变量引用了列表库。
您也可以使用SPWeb.getlist(http://msdn.microsoft.com/library/office/microsoft.sharepoint.spweb.getlist.aspx)并检查execption。
希望这有帮助。
答案 1 :(得分:0)
首先,由于性能原因,您不应使用SPList.Items
集合。改为使用SPList.AddItem
方法。
其次,问题出在Add
方法的论证中。第一个参数应该是应该创建列表项的文件夹的服务器相对URL。您需要从列表中获取文件夹,然后获取它的URL。
或者你可以只使用favoritesList.AddItem()