Это достаточно распространенная проблема, которая автоматически обрабатывается ASP.NET, если вы используете элемент управления SiteMapDataSource в качестве источника данных для TreeView. В этом случае вы не упомянули источник данных вашего TreeView.
Вы также не упомянули, содержит ли TreeView ссылки (установлено свойство NavigateUrl
) или элементы Text, которые отправляются после каждого клика. Если это первое, то, насколько я знаю, вам не повезло! Это связано с тем, что ни одно из событий Selection не вызывается для TreeNodes, для которых установлен NavigateUrl
. Они просто функционируют как обычные гиперссылки.
Если, однако, это последний, то вы можете попробовать следующие шаги:
a. Обработка события SelectedNodeChanged
TreeView. В этом обработчике событий получите текущее значение свойства SelectedNode.ValuePath
и сохраните его в ViewState / Session. Используйте Value
из SelectedNode для условного перенаправления страницы на URL-адрес, связанный с ней.
Что-то вроде следующего:
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeNode selNode = TreeView1.SelectedNode;
string pathToNode = selNode.ValuePath;
Session.Add("SelPath", pathToNode);
switch (selNode.Value)
{
//Redirect to URL accordingly.
}
}
b. При последующей загрузке главной страницы (страницы, на которую вы перенаправлены) получите значение ValuePath
, установленное ранее, найдите ранее выбранный узел и Expand
it.
Примерно так:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
string pathToNode = (string)Session("SelPath");
Session.Remove("SelPath");
TreeNode selNode = TreeView1.FindNode(pathToNode);
if (selNode != null)
{
selNode.Expand();
}
}
}
Обратите внимание, что у меня не было возможности протестировать код, так что это в основном гипотетически.