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/

  • 相关阅读:
    layer-list:Android中layer-list使用详解
    Nexus6p:正在下载系统更新,没有进度
    转:浅谈char类型范围
    C/C++/Java中的volatile关键字
    C++中的mutable关键字
    C++中的typedef typename 作用
    C++中的友元函数和友元类
    用flashfxp做ftp镜像同步
    python读取caffemodel文件
    py-faster-rcnn几个辅助脚本
  • 原文地址:https://www.cnblogs.com/ITHelper/p/1634957.html
Copyright © 2011-2022 走看看