0

设置

我正在使用 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,因此与 URL无关。

我还使用 PowerShell 隐藏了默认的 Title 字段:

$titleField = $favoritesList.Fields.GetField("Title")
$titleField.LinkToItem = $false
$titleField.Required = $false
$titleField.Hidden = $true
$titleField.Update()

可以在此处找到列表的 XML 模式。

4

2 回答 2

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 ) 并检查执行。

希望这可以帮助。

于 2013-11-14T19:21:15.217 回答
0

首先,SPList.Items由于性能原因,您不应该使用集合。改用SPList.AddItem方法。

其次,问题在于Add方法论点。第一个参数应该是应该在其中创建列表项的文件夹的服务器相对 URL。您需要从列表中获取文件夹,然后获取它的 url。或者也许你可以只使用favoritesList.AddItem()

于 2013-11-14T14:47:44.160 回答