我正在编写一些消息面板作为用户控件。代码看起来像这样(为了清晰起见缩短了)
protected void Page_PreRender(object sender, EventArgs e)
{
BindMessages(MessageType.Error, ErrListView);
}
private void BindMessages(MessageType type, ListView target)
{
List<string> messages = Session.PopMessages(type);
target.DataSource = messages;
target.DataBind();
}
ASCX:
<asp:ListView runat="server" ID="ErrListView">
<ItemTemplate><li><%# Container.DataItem %></li></ItemTemplate>
</asp:ListView>
代码在每个请求(初始页面加载和回发)上执行,并且消息正确地来自SessionState
。但是,如果请求是回发,则实际上不会更新消息(就好像DataBind()
不会发生一样)。
任何人都有线索了吗?
答案 0 :(得分:0)
我在这里失败的原因是我的内容没有包含UpdatePanel。更改我的ascx文件以包含所述控件解决了我的问题。
<asp:UpdatePanel runat="server" ID="StatusUpdatePanel">
<ContentTemplate>
<ul Class="Errors">
<asp:ListView runat="server" ID="ErrListView">
<ItemTemplate><li><%# Container.DataItem %></li></ItemTemplate>
</asp:ListView>
</ul>
</ContentTemplate>
</asp:UpdatePanel>