我正在尝试根据通过查询字符串传递的 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 和标题。但如果我加载mypage.aspx?id=2
,它加载的数据与我传入的数据相同id=1
。之后对任何其他 id 的请求也是如此。
我已经通过调试器并检查了绑定到 XmlDataSource 的数据 - 一切看起来都很好,但是 TreeView 显示了来自第一个请求的数据。
如果我取出DataSourceID
属性,重新加载页面以使 TreeView 不显示任何内容,重新添加DataSourceID
属性,然后 load mypage.aspx?id=2
,然后树将显示正确的数据。但是,此后任何带有任何其他 id 的请求都只会显示数据,就好像我传入了一样id=2
。所以奇怪的事情正在发生。
数据是否被缓存在某个地方,或者我做错了什么?