Viewstate在.net Sitecore页面的回发中丢失了

时间:2010-10-27 16:13:16

标签: asp.net viewstate sitecore

我在使用Sitecore的.net应用程序的回发中丢失了viewstate时出现了一些奇怪的行为。我假设它可能是某个配置变量,但我是Sitecore的新手,并不知道从哪里开始寻找。


更新: Sitecore现在已经回复给我们了。我们最近添加了dtSearch模块,并且在dtSearch.config中将AutomaticDataBind设置为true,这将覆盖web配置中的设置。我们现在删除了它,它再次正常工作。


如果这可能会有所帮助,我做了一个小测试。它是一个页面上的两个用户控件,都带有转发器。更新视图状态时会丢失,因此即使我再次绑定更新的转发器,另一个转发器的数据也将丢失。

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 个答案:

答案 0 :(得分:1)

您的web.config的“typesThatShouldNotBeExpanded”部分中是否有System.Web.UI.WebControls.Repeater?

我发现在Sitecore中肯定有一些东西不适用于常规的PostBack模型......但是这个Repeater应该没问题。

一个问题是在Repeater中使用FieldRenderers。它们似乎没有在Postback上正确恢复Item属性。

答案 1 :(得分:0)

据我所知,this thread描述了完全相同的问题,但使用的是DataGrid。看看web.config中的AutomaticDataBind是否设置为'false'。