SharePoint将项目添加到自定义列表会导致“URL值无效.URL字段包含无效数据。请检查该值并重试”

时间:2013-11-14 11:58:19

标签: c# sharepoint powershell

设置

我正在以编程方式将元素添加到自定义列表中,其中包含来自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

2 个答案:

答案 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()