クエリ文字列を介して渡された 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
から loadmypage.aspx?id=2
すると、ツリーに正しいデータが表示されます。しかし、それ以降の他の id を持つリクエストは、渡されたかのようにデータのみを表示しますid=2
。そのため、何か奇妙なことが起こっています。
データはどこかにキャッシュされていますか、それとも何か間違っていますか?