2009-09-18 3 views
0

우리는 검색을 사용하는 Sharepoint 사이트를 가지고 있습니다. 우리가 GridView 컨트롤에 DateKeyNames를 사용할 때 오류가 발생하는 것을 우리가 발견 한 시험의 조금 후DataKeynames를 사용할 때 셰어 포인트 검색이 실패합니다.

 
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) 

:

우리는 다음과 같은 오류가 발생합니다.

검색,이 오류 및 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; } 
} 

UPDATE

이 오류는 개발자의 시스템에서 발생했을 것입니다, 그래서 클러스터의 다른 컴퓨터에 다른되는 기계 키에 realated되지 않습니다.

개발자 중 한 명이 MOSS를 설치 했으므로 오류가 발생하지 않습니다. WSS 만 설치 한 개발자는 오류가 발생합니다.

업데이트 2

내가 당신의 GridView의 데이터 소스뿐만 아니라 누락 된 코드 세트부터 여기 추측을 던질거야

+2

오류가 발생한 코드를 게시 할 수 있습니까? –

+0

@Kit 코드 샘플을 추가했습니다 –

답변

0

우리는 결국이 링크의 예에 따라이를 해결 :

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

I는이 데이터 테이블이 아닌 차이를 만들어 목록에 결합하는 것을 생각한다.

Sharepoint 그리드가 자동 생성 된 열을 허용하지 않는다는 사실은이 문제를 일으키는 요인 중 하나 인 것 같습니다.

1

코드에 데이터 소스를 추가했지만 간다 적이 ..

아마도 GridView의 속성을 설정하는 순서와 관련이 있습니다.() (이 데이터를 가질 수 있도록)

  1. 당신의 GridView
  2. 만들기의 GridView의 데이터 소스를 설정
  3. 설정 DataKeyNames
  4. 전화 GridView.DataBind을 : 내 생각 엔 당신이 순서를 설정할 필요가있다

3 단계와 4 단계는 확실하지 않은 단계입니다. DataBind를 설정 한 다음 DataKeyNames를 설정해야 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 데이터 소스를 추가하지 않으면이 오류가 발생합니다. –

+0

데이터 소스가 없다면 어떻게 DataKeyNames 속성을 사용할 수 있습니까? –

+0

@Kit, 우리는 문제를 일으킬 수있는 모든 것을 제거하려고 노력했습니다. 데이터 바인딩/데이터 소스 코드를 업데이트했습니다.동일한 오류가 발생합니다. –