0

我正在尝试根据通过查询字符串传递的 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。所以奇怪的事情正在发生。

数据是否被缓存在某个地方,或者我做错了什么?

4

1 回答 1

1

您是否尝试将缓存设置为禁用?

XmlDataSource 上的 EnableCaching="false"

于 2012-07-31T20:46:56.117 回答