使用DataKeynames时,Sharepoint搜索失败

时间:2009-09-18 13:28:35

标签: sharepoint search gridview moss wss

我们有一个使用搜索的Sharepoint网站。

我们收到以下错误:

Unable to validate data.   at 
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData
(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, 
IVType ivType, Boolean useValidationSymAlgo) 
   at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)

经过一些测试后,我们发现当我们在GridView控件上使用DateKeyNames时会发生错误。

不确定为什么搜索,此错误和DataKeyNames之间应该有任何组合。

有什么想法吗?

更新:这是一些代码

[Guid("8891224e-e830-4ffa-afbd-f789583d8d14")]
    public class TestErrorGridView : System.Web.UI.WebControls.WebParts.WebPart
    {
        Control ascxToAdd;
        public TestErrorGridView()
        {
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

        }

        protected override void CreateChildControls()
        {


            base.CreateChildControls();
            Table test = new Table();
            TestBindObject t1 = new TestBindObject() { ID = 1, Name = "Test" };
            List<TestBindObject> l1 = new List<TestBindObject>();
            l1.Add(t1);
            SPGridView testGrid = new SPGridView() { AutoGenerateColumns = false};
            BoundField header = new BoundField();
            header.DataField = "ID";
            BoundField name = new BoundField();
            name.DataField = "Name";
            testGrid.Columns.Add(header);
            testGrid.Columns.Add(name);
            testGrid.DataSource = l1;
            testGrid.DataBind();
            // If you comment out this line search works
            testGrid.DataKeyNames = new string[] { "ID" };
            this.Controls.Add(testGrid);

            base.CreateChildControls();
            SPGridView testGrid = new SPGridView() { AutoGenerateColumns = false, EnableViewState=false };

            testGrid.DataKeyNames = new string[] { "testid" };  

            this.Controls.Add(testGrid);

        }
    }

public class TestBindObject
{
   public int ID { get; set; }
   public string Name { get; set; }
}

更新

在开发人员计算机上发生此错误,因此它不会与群集中不同计算机上的计算机密钥不同。

其中一位开发人员安装了MOSS,他没有收到错误。安装了WSS的开发人员会收到错误。

更新2

已将数据源添加到代码

2 个答案:

答案 0 :(得分:1)

我会在这里抛出猜测,因为您设置GridView的数据源的代码也丢失了,但是这里有...

它可能与您设置GridView属性的顺序有关。我的猜测是你需要按照这个顺序设置它:

  1. 创建GridView
  2. 设置GridView的数据源(以便它有数据)
  3. 设置DataKeyNames
  4. 调用GridView.DataBind()
  5. 步骤3和4是我不确定的步骤。您可能需要DataBind,然后设置DataKeyNames。

答案 1 :(得分:0)

我们最终通过以下链接中的示例解决了这个问题:

http://msdn.microsoft.com/en-us/library/bb466219.aspx

我认为那是绑定到数据表而不是一个能产生差异的列表。

Sharepoint网格不允许自动生成列的事实似乎是导致此问题的因素之一。