Состояние просмотра потеряно при обратной передаче для страницы .net Sitecore - PullRequest
2 голосов
/ 27 октября 2010

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


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


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

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();
 }
}

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

Спасибо

Annelie

Ответы [ 2 ]

1 голос
/ 27 октября 2010

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

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

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

0 голосов
/ 28 октября 2010

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

...