Это довольно распространенная проблема, которая автоматически обрабатывается ASP.NET, если вы используете элемент управления SiteMapDataSource в качестве источника данных для вашего TreeView. В этом случае вы не указали, что такое Datasource вашего TreeView.
Вы также не указали, содержит ли TreeView ссылки (устанавливается свойство NavigateUrl
) или текстовые элементы, которые возвращают для каждого щелчка. Если это первый, то, насколько я знаю, вам не повезло! Это связано с тем, что ни один из событий выбора не поднят для TreeNodes, у которых есть их NavigateUrl
. Они просто функционируют как обычные гиперссылки.
Однако, если это последнее, то вы можете попробовать следующие шаги:
а. Обращение с событием TreeView SelectedNodeChanged
. В этом обработчике событий извлеките текущее значение свойства 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.
}
}
б. При последующей загрузке главной страницы (страницы, на которую вы перенаправляете), установите ранее установленное значение ValuePath
и найдите ранее выбранный узел и Expand
.
Что-то вроде следующего:
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();
}
}
}
Обратите внимание, что у меня не было возможности проверить код, так что это в основном гипотетически.
где я могу написать ваш код, пожалуйста? – Kartik