Я получаю странное поведение, когда 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