Поиск Sharepoint завершается неудачно при использовании DataKeynames - PullRequest
0 голосов
/ 18 сентября 2009

У нас есть сайт 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)

После небольшого тестирования мы обнаружили, что ошибка возникает при использовании DateKeyNames в элементе управления GridView.

Не уверен, почему должна быть какая-либо комбинация между Search, этой ошибкой и 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

Эта ошибка возникает на машинах разработчика, поэтому она не распространяется на разные ключи машины на разных машинах в кластере.

Один из разработчиков установил MOSS, он не получает ошибку. Разработчики, которые только что установили WSS, получают сообщение об ошибке.

ОБНОВЛЕНИЕ 2

Добавили источник данных в код

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

Я собираюсь высказать здесь предположение, поскольку код, в котором вы устанавливаете источник данных GridView, также отсутствует, но здесь идет ...

Возможно, это связано с порядком, в котором вы устанавливаете свойства GridView. Я предполагаю, что вам нужно установить его в следующем порядке:

  1. Создайте свой GridView
  2. Установить источник данных GridView (чтобы он имел данные)
  3. Set DataKeyNames
  4. Вызов GridView.DataBind ()

Шаг 3 и 4 - это шаги, в которых я не уверен. Может потребоваться DataBind, а затем установить DataKeyNames.

0 голосов
/ 05 октября 2009

Мы в конечном итоге решили эту проблему, следуя примеру по этой ссылке:

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

Я думаю, что это была привязка к таблице данных, а не к списку, который имел значение.

Тот факт, что сетки Sharepoint не допускают автоматически сгенерированные столбцы, по-видимому, является одним из факторов, приводящих к этой проблеме.

...