我在使用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
答案 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'。