我正试图基于通过查询字符串传递的ID创建TreeView。这是我的TreeView控件:
<asp:TreeView ID="tvDirectories" runat="server" DataSourceID="xdsDirectories">
<DataBindings>
<asp:TreeNodeBinding DataMember="DirectoryNode"
ValueField="Id" TextField="Title" />
</DataBindings>
</asp:TreeView>
<asp:XmlDataSource ID="xdsDirectories" runat="server" />
加载页面时,我获取ID,做一些幕后工作来获得我想要的xml,然后将其绑定到XmlDataSource。这是代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string id = Request.QueryString["id"];
StringBuilder sb = new StringBuilder();
XmlWriter xw = XmlWriter.Create(sb);
GetDirectories(id).WriteXml(xw); // my function
xw.Flush();
xw.Close();
string xml = sb.ToString();
xdsDirectories.Data = xml;
xdsDirectories.DataBind();
}
}
下面是我的函数返回的xml的样子:
<?xml version="1.0" encoding="utf-16"?>
<DirectoryNode Id="1" Title="Directory1">
<DirectoryNode Id="24" Title="SubDirectory1" />
<DirectoryNode Id="57" Title="SubDirectory2" />
</DirectoryNode>
因此,当我第一次加载mypage.aspx?id=1
时,它工作得很好——树正确地加载了所有的Id和Title。但如果我加载mypage.aspx?id=2
,它加载的数据与我传入id=1
的数据相同。在那之后,它对任何其他id的请求都会执行相同的操作。
我已经检查了调试器,并检查了绑定到XmlDataSource的数据——一切看起来都很好,但TreeView显示了第一个请求的数据。
如果我去掉DataSourceID
属性,重新加载页面,使TreeView不显示任何内容,再添加回DataSourceID
属性,然后加载mypage.aspx?id=2
,则树将显示正确的数据。但之后任何其他id的请求都只会显示数据,就好像我传入了id=2
一样。所以发生了一些奇怪的事情。
数据是缓存在某个地方,还是我做错了什么?
您是否尝试将缓存设置为禁用?
XmlDataSource 上的EnableCaching="false"