ViewState forsvinder ved 2. postback
Jeg har et virkelig drilsk problem med ViewState i en custom control. Min kontrol overskriver SaveViewState() og LoadViewState() og alt fungerer fint ved første postback. Ved andet postback går der dog noget galt og det jeg har gemt i ViewState bliver væk.Følgende er et stærkt simplificeret eksempel hvor problemet opstår. Først en custom control i C# og så en test page.
Håber at nogen kan knække den, for jeg er vist selv ved at have stirret mig helt blind.
----------------------------------
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyNamespace
{
public class MyControl : System.Web.UI.WebControls.WebControl
{
public MyControl()
{
}
private MenuItem _item = new MenuItem();
public MenuItem Item
{
get
{
if (this.IsTrackingViewState)
{
((IStateManager)_item).TrackViewState();
}
return _item;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write(_item.Text);
}
protected override object SaveViewState()
{
object[] obj = new object[2];
obj[0] = base.SaveViewState();
obj[1] = ((IStateManager)_item).SaveViewState();
return obj;
}
protected override void LoadViewState(object savedState)
{
object[] obj = (object[])savedState;
((IStateManager)_item).LoadViewState(obj[1]);
base.LoadViewState(obj[0]);
}
}
}
----------------------------------
<%@ Page Language="C#" %>
<%@ Register Namespace="MyNamespace" TagPrefix="test" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ctrl.Item.Text = "Jubii";
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<test:MyControl ID="ctrl" runat="server" />
<asp:Button Text="postback" runat="server" />
</div>
</form>
</body>
</html>
