我们有一个使用搜索的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
已将数据源添加到代码
答案 0 :(得分:1)
我会在这里抛出猜测,因为您设置GridView的数据源的代码也丢失了,但是这里有...
它可能与您设置GridView属性的顺序有关。我的猜测是你需要按照这个顺序设置它:
步骤3和4是我不确定的步骤。您可能需要DataBind,然后设置DataKeyNames。
答案 1 :(得分:0)
我们最终通过以下链接中的示例解决了这个问题:
http://msdn.microsoft.com/en-us/library/bb466219.aspx
我认为那是绑定到数据表而不是一个能产生差异的列表。
Sharepoint网格不允许自动生成列的事实似乎是导致此问题的因素之一。