动态绑定到XmlDataSource时缓存的TreeView节点



我正试图基于通过查询字符串传递的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"

最新更新