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/

  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1421 搬寝室
    HDU 1176 免费馅饼
    七种排序算法的实现和总结
    算法纲要
    UVa401 回文词
    UVa 10361 Automatic Poetry
    UVa 537 Artificial Intelligence?
    UVa 409 Excuses, Excuses!
    UVa 10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/ITHelper/p/1634957.html
Copyright © 2011-2022 走看看