Viewstate потерян при обратной передаче для страницы .net Sitecore

У меня странное поведение с потерей состояния просмотра при обратной передаче для приложения .net с использованием Sitecore. Я предполагаю, что это может быть какая-то переменная конфигурации, но я новичок в Sitecore и действительно не знаю, с чего начать.


ОБНОВЛЕНИЕ: Sitecore получил ответ. Недавно мы добавили модуль dtSearch, и для параметра AutomaticDataBind было установлено значение true в файле dtSearch.config, который переопределяет настройку в веб-конфигурации. Теперь мы удалили его, и он снова работает нормально.


Я сделал небольшой тест, если это может помочь. Это два пользовательских элемента управления на одной странице, оба с повторителем. При обновлении состояния просмотра теряется, поэтому даже если я снова привяжу обновленный ретранслятор, данные для другого будут потеряны.

Usercontrol 1:

<asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="Repeater1_ItemBind">
 <ItemTemplate>
  <li>
   <asp:Literal runat="server" ID="Literal1"></asp:Literal>
  </li>
 </ItemTemplate>
</asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{
 if (!IsPostBack)
 {
  List<string> myTestList1 = new List<string>();
  myTestList1.Add("a");
  myTestList1.Add("b");

  Repeater1.DataSource = myTestList1;
  Repeater1.DataBind();
 }
}

protected void Repeater1_ItemBind(object sender, RepeaterItemEventArgs e)
{
 Literal Literal1 = (Literal)e.Item.FindControl("Literal1");
 Literal1.Text = (string)e.Item.DataItem;
}

Usercontrol 2:

<asp:Repeater runat="server" ID="Repeater2" OnItemDataBound="Repeater2_ItemBind" OnItemCommand="Repeater2_Command">
 <ItemTemplate>
  <li>
   <asp:Literal runat="server" ID="Literal2"></asp:Literal>

   <asp:LinkButton ID="Update" CommandName="Update" runat="server">
    update
   </asp:LinkButton>
  </li>
 </ItemTemplate>
</asp:Repeater>
private string test = String.Empty;

protected void Page_Load(object sender, EventArgs e)
{
 if (!IsPostBack)
 {
  test = "a";

  Repeater2.DataSource = test;
  Repeater2.DataBind();
 }
}

protected void Repeater2_ItemBind(object sender, RepeaterItemEventArgs e)
{
 char c = (char)e.Item.DataItem;

 Literal Literal2 = (Literal)e.Item.FindControl("Literal2");
 Literal2.Text = c.ToString();
}


protected void Repeater2_Command(object sender, RepeaterCommandEventArgs e)
{
 if (e.CommandName == "Update")
 {
  test = "b";

  Repeater2.DataSource = test;
  Repeater2.DataBind();
 }
}

Есть ли у кого-нибудь идеи, что может происходить? Сообщите мне, если мне понадобится дополнительная информация. Больше всего раздражает то, что он работал на прошлой неделе, но я понятия не имею, что изменилось!

Спасибо,

Аннели


person annelie    schedule 27.10.2010    source источник


Ответы (2)


Насколько я понимаю, эта ветка описывает точно такую ​​же проблему, но с DataGrid. Посмотрите, помогает ли установка для AutomaticDataBind значения false в web.config.

person Yan Sklyarenko    schedule 27.10.2010
comment
Спасибо за ссылку, но для нее уже установлено значение false, поэтому должно быть что-то еще. - person annelie; 28.10.2010
comment
@Yan - см. Обновление, для параметра AutomaticDataBind в файле dtSearch.config было установлено значение true, которое переопределяет настройку в веб-конфигурации. - person annelie; 02.11.2010
comment
@annelie: Замечательно, что проблема с хорошо известным источником оказалась именно такой ;-) - person Yan Sklyarenko; 02.11.2010
comment
@Yan - Мне это было не совсем известно. :) Я не знал, что они исправляли конфиги, и я предполагал, что дополнительные конфиги будут изменять только значения, относящиеся к этому модулю, а не переопределять основной, но вы узнаете что-то новое каждый день! :) - person annelie; 02.11.2010
comment
@annelie - о, тогда вам обязательно стоит познакомиться с sdn.sitecore.net/FAQ/Administration/ и вthecore.cassidy.dk/2009/05/. Удачи! :-) - person Yan Sklyarenko; 02.11.2010
comment
@Yan - Отлично, спасибо! У меня еще нет логина разработчика на Sitecore, но я зарегистрируюсь и посмотрю! :) - person annelie; 02.11.2010

Есть ли у вас System.Web.UI.WebControls.Repeater в разделе "typesThatShouldNotBeExpanded" вашего web.config?

Я обнаружил, что есть некоторые вещи, которые не работают с обычной моделью PostBack в Sitecore ... но этот Repeater должен быть в порядке.

Одна из проблемных областей - наличие FieldRenderers внутри ретрансляторов. Похоже, они неправильно восстанавливают свойство Item при обратной передаче.

person Bryan    schedule 27.10.2010
comment
Что сказал Брайан. Это почти наверняка проблема, связанная с typesThatShouldNotBeExpanded. Ссылки: intothecore.cassidy.dk/2009/01/ и sdn.sitecore.net/Scrapbook/ - person Mark Cassidy; 28.10.2010
comment
Sitecore 6.3 добавляет следующий параметр: ‹typesThatShouldNotBeExpanded› ‹type› System.Web.UI.WebControls.Repeater ‹/type› ‹type› System.Web.UI.WebControls.DataList ‹/type› ‹type› System.Web.UI .WebControls.GridView ‹/type› ‹type› System.Web.UI.WebControls.ListView ‹/type› ‹type› System.Web.UI.WebControls.FormView ‹/type› ‹type› Microsoft.Reporting.WebForms.ReportViewer ‹/Type› ‹type› Telerik.Web.UI.RadGrid ‹/type› ‹/typesThatShouldNotBeExpanded› - person Mark Cassidy; 28.10.2010
comment
Repeater и Datalist уже там, так что, к сожалению, не думайте, что это проблема. - person annelie; 28.10.2010
comment
Убедитесь, что у вас отключены все настройки кэширования на уровне Sublayout AND Presentation Details. - person Bryan; 28.10.2010
comment
Насколько я могу судить, они выключены. Один из других ребят провел простой тест на странице, и это тоже не сработало, так что то же самое происходит, даже когда это не субклейка. Похоже, где-то должна быть какая-то глобальная настройка, но не знаю что. Сегодня мы отправляем весь проект на Sitecore, чтобы они могли посмотреть. Я отправлю то, что они скажут, когда они вернутся к нам. Если мы не найдем его раньше, чем они это сделают, это так. :) - person annelie; 29.10.2010