我们在使用SharePoint的搜索框时遇到问题。每当我们尝试搜索我们得到的东西时:
无法验证数据。在 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(布尔 fEncrypt,Byte [] buf,Byte []修饰符, Int32 start,Int32 length,IVType ivType,Boolean useValidationSymAlgo) 在 System.Web.UI.ObjectStateFormatter.Deserialize(字符串 inputString)exeption。
是否有人知道此异常的原因或解决方法?
新条目:
我正在使用SPGridView,我在Web部件中使用datakeys属性。 webpart工作,但是我们发现使用datakeys属性可以解决这个问题,如果你尝试使用搜索文本框并单击搜索按钮,它将获得以下异常:
无法验证数据。 at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt,Byte [] buf,Byte [] modifier,Int32 start,Int32 length,IVType ivType,Boolean useValidationSymAlgo) 在System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)
这是我试图做的事情:
使gridview不是spgridview并将autogenerate设置为true(有效) 删除datakeynames(工作) 用空的网格测试(failes) 使用非空gridview(failes)进行测试 更改机器密钥(failes) 在gridvew(failes)上转向视图状态 将gridview ti移动到ascx文件(failes)
我似乎无法想出这个。 enyone有这个错误并且能够解决它吗?
编辑10.09.2009
这是我测试的最后一个代码。我使用MSDN示例作为参考。我也试过没有数据表MSDN Example
public class TestErrorGridView : System.Web.UI.WebControls.WebParts.WebPart
{
Control ascxToAdd;
protected DataTable PropertyCollection = new DataTable();
private DataColumn key;
public TestErrorGridView()
{
key = PropertyCollection.Columns.Add("ID", typeof(string));
PropertyCollection.Columns.Add("Name", typeof(string));
}
public void AddProperty(TestBindObject data)
{
DataRow newRow = PropertyCollection.Rows.Add();
newRow["ID "] = data.ID;
newRow["Name"] = data.Name;
}
public void BindGrid(SPGridView grid)
{
SPBoundField fldPropertyName = new SPBoundField();
fldPropertyName.HeaderText = "ID";
fldPropertyName.DataField = "ID";
grid.Columns.Add(fldPropertyName);
SPBoundField fldPropertyValue = new SPBoundField();
fldPropertyValue.HeaderText = "Name";
fldPropertyValue.DataField = "Name";
grid.Columns.Add(fldPropertyValue);
PropertyCollection.PrimaryKey = new DataColumn[] { key };
grid.DataSource = PropertyCollection.DefaultView;
grid.DataKeyNames = new string[] { key.ColumnName };
grid.DataBind();
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
protected override void CreateChildControls()
{
base.CreateChildControls();
TestBindObject t1 = new TestBindObject() { ID = 1, Name = "Test3" };
this.AddProperty(t1);
SPGridView testGrid = new SPGridView() { AutoGenerateColumns = false };
this.BindGrid(testGrid);
this.Controls.Add(testGrid);
}
}
[Serializable]
public class TestBindObject
{
public int ID { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:1)
从错误消息中我会说您在Web场环境中运行。您是否在每个SharePoint web.config文件中设置了相同的machineKey?有关详细信息,请参阅this link。