zoukankan      html  css  js  c++  java
  • MOSS: SPListItem.Update() throws error Operation is not valid due to the current state of the object.

    问题:

    在SPSecurity.RunWithElevatedPrivileges 代码块中执行SPListItem.Update(),

    SPSecurity.RunWithElevatedPrivileges

                    (

                        () =>

                        {

                            using (SPSite site = new SPSite("web url"))

                            {

                                using (var tempWeb = site.OpenWeb())

                                {

                                    var list = tempWeb.Lists["mylist"];

                                    var Item = list.Items[0];

                                    Item["Title"] = "new Title";

                                    Item.Update();

                                }

                            }

                        }

                    ); 

    将会得到如下错误:Operation is not valid due to the current state of the object.

     解决此问题有两个办法:

    1。Item.Update();放到SPSecurity.RunWithElevatedPrivileges语句块的外面。

    SPListItem Item = null;                

          SPSecurity.RunWithElevatedPrivileges

                    (

                        () =>

                        {

                            using (SPSite site = new SPSite("web url"))

                            {

                                using (var tempWeb = site.OpenWeb())

                                {

                                    var list = tempWeb.Lists["mylist"];

                                    Item = list.Items[0];                               

                                }

                            }

                        }

                    );

          Item["Title"] = "new Title";

          Item.Update();

     详情可参考老外的原文:http://littletalk.wordpress.com/2009/04/03/moss-splistitemupdate-throws-error-operation-is-not-valid-due-to-the-current-state-of-the-object/

    2. 第二个方法是在new SPSite(),SPWeb时不能Hard Code URL类似于以上的代码,

    应该使用如下方式:

            var webContext = SPContext.Current.Web; 

            SPSecurity.RunWithElevatedPrivileges

                    (

                        () =>

                        {

                            using (SPSite site = new SPSite(webContext.Site.ID))

                            {

                                using (var tempWeb = site.OpenWeb(webContext.ID))

                                {

                                    var list = tempWeb.Lists["mylist"];

                                    var Item = list.Items[0];

     

                                    Item["Title"] = "new Title";

                                    Item.Update();

                                }

                            }

                        }

                    );

    但是此方法有一个问题:在非Web应用程序的中,如控制台程序,以上代码将出现错误,因为SPContext.Current.Web为Null。

     详情可参考老外的原文:http://vspug.com/ssa/2007/11/25/operation-is-not-valid-due-to-the-current-state-of-the-object/

  • 相关阅读:
    Git的安装
    报错Invalid character found in method name. HTTP method names must be tokens|the HTTP protoco
    Spring Cloud(二)—— Eureka注册与发现
    spring-boot swagger2 设置全局token,说明页面接口无法带入token
    c# 结构体中包含结构体数组的使用
    百度地图api热力图时报错Cannot read property 'y' of undefined
    springboot使用freemaker导出word文档
    c# 同时运行两个相同的程序
    idea maven的pom文件已导入依赖,但是无法引入该包中class
    bootstrap Table 导出时时间格式显示秒 科学计数法显示
  • 原文地址:https://www.cnblogs.com/ITHelper/p/1634957.html
Copyright © 2011-2022 走看看