2009-09-18 7 views
0

Nous avons un site Sharepoint qui utilise la recherche.La recherche de Sharepoint échoue lors de l'utilisation de DataKeynames

Nous obtenons l'erreur suivante:

 
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) 

Après un peu de tests, nous avons constaté que l'erreur se produit lorsque l'on utilise DateKeyNames sur un contrôle GridView.

Vous ne savez pas pourquoi il devrait y avoir une combinaison entre Search, cette erreur et DataKeyNames.

Des idées?

Mise à jour: Voici un code

[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; } 
} 

MISE À JOUR

Cette erreur occurrs sur les machines de développement, il est donc pas realated aux touches de la machine étant différentes sur différentes machines dans un cluster.

Un des développeurs a installé MOSS, il n'obtient pas l'erreur. Les développeurs qui ont juste installé WSS ont l'erreur.

MISE À JOUR 2

ont ajouté datasource au code

+2

Pouvez-vous envoyer le code où l'erreur se produit? –

+0

@Kit Avoir ajouté un exemple de code –

Répondre

0

Nous avons finalement résolu ce problème en suivant l'exemple dans ce lien:

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

Je pense que c'était obligatoire à une table de données plutôt que d'une liste qui fait la différence.

Le fait que les grilles Sharepoint n'autorisent pas les colonnes générées automatiquement semble être l'un des facteurs conduisant à ce problème.

1

Je vais jeter une supposition ici car le code où vous définissez manque aussi bien, mais voilà la source de données du GridView ..

Cela a probablement quelque chose à voir avec l'ordre dans lequel vous définissez les propriétés de GridView. Je pense que vous avez besoin de le mettre dans cet ordre:

  1. Créez votre GridView
  2. Set (de sorte qu'il a données)
  3. Set DataKeyNames
  4. Appel GridView.DataBind datasource du GridView()

Les étapes 3 et 4 sont les étapes dont je ne suis pas sûr. Vous devrez peut-être DataBind, puis définir DataKeyNames.

+0

Merci pour la réponse, cette erreur se produit sans nous ajoutant la source de données –

+0

Eh bien, si vous n'avez pas de source de données, comment pouvez-vous espérer utiliser la propriété DataKeyNames? –

+0

@Kit, nous essayions de dépouiller tout ce qui pourrait causer le problème. J'ai mis à jour le code avec la liaison de données/source de données.Nous obtenons la même erreur. –

Questions connexes