在代码中创建Sharepoint博客评论

时间:2010-03-19 17:13:46

标签: c# sharepoint

我需要按代码创建Sharepoint博客评论:

SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        sw.AllowUnsafeUpdates = true;

        SPList spList = SPContext.Current.Web.Lists["Kommentare"];
        SPListItem listItem = spList.Items.Add();
        listItem[listItem.Fields["Titel des Beitrags"].InternalName] = SPContext.Current.Item["Title"];
        listItem[listItem.Fields["Titel"].InternalName] = titlearea.Value;
        listItem[listItem.Fields["Textkörper"].InternalName] = CommentArea.Value;
        listItem[SPBuiltInFieldId.Author] = curUser;
        //listItem[SPBuiltInFieldId.Modified] = curUser;
        listItem.Update();
        //spList.Update();
        sw.AllowUnsafeUpdates = false;
    });

但我总是得到“无效数据已用于更新列表项。您尝试更新的字段可能只读”

我尝试过Systemupdate,值似乎有效。

5 个答案:

答案 0 :(得分:1)

我认为作者字段是只读的,而sharepoint会自动在那里分配已记录的用户名。

所以你可以在评论一下listItem[SPBuiltInFieldId.Author] = curUser;

之后尝试一下

答案 1 :(得分:0)

也许这与您的问题无关,但是如果没有适当权限的用户运行代码,您正在创建SPWeb对象(或使用上下文) 委托,它不会正常提升。做这样的事情:

SPSecurity.RunWithElevatedPrivileges(delegate {
using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.ID))
using (SPWeb elevatedSite = elevatedSite.RootWeb)
{

//impl

}});

答案 2 :(得分:0)

listItem [listItem.Fields [“Titel des Beitrags”]。InternalName] = SPContext.Current.Item [“Title”];

SPContext.Current.Item是否指向您要将评论添加到博客帖子的refence?

我的意思是你的代码是在自定义Web部件中运行的,它取代了博客文章中标准的“添加评论”Web部件吗?

答案 3 :(得分:0)

好的,Posttitle是一个SPLookupField,必须填写:“{ID}#; {Title}”

答案 4 :(得分:0)

这有效,经过验证

    public static void AddComment(string url)
    {
        using (SPSite site = new SPSite(url))
        {
            site.AllowUnsafeUpdates = true;
            using (SPWeb web = site.OpenWeb())
            {
                web.AllowUnsafeUpdates = true;
                SPList commentList = web.Lists["Comments"];
                SPListItem newItem = commentList.AddItem();
                newItem["Body"] = "body";
                newItem["Title"] = "title";
                newItem["PostTitle"] = "2;#post1";
                newItem.Update();
            }
        }
    }

您可能正在编写一个只读字段,例如作者。