我相信您正在寻找 SelectedNodeChanged 事件。您应该能够在此事件中加载您的子节点。基本上,每次您通过单击选择一个节点时都会触发此事件。
你的aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="div1" runat="server">
</div>
<asp:TreeView ID="TreeView1" runat="server"
onselectednodechanged="TreeView1_SelectedNodeChanged">
</asp:TreeView>
</form>
</body>
</html>
你的代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
TreeView1.Nodes.Add(new TreeNode("Node1"));
TreeView1.Nodes[0].ChildNodes.Add(new TreeNode("ChildNode"));
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
Response.Write(TreeView1.SelectedNode.Text);
}
}
也许这个例子会对你有所帮助,我正在使用 baisc 递归在 .NET core mvc 中创建类似用户树的结构。
这里我使用sql server来存储用户数据,每个节点/用户都由用户名标识。每个节点都是个体用户。登录用户将显示在顶部,子用户将显示在底部,形成一个具有 leftMember/leftNode 和 rightMember/rightNode 的树状结构。
模型类:
public class UserModel
{
[Key]
public int userId { get; set; }
[Required]
public string firstName { get; set; }
[Required]
public string lastName { get; set; }
[Required]
public string userName { get; set; }
[Required]
public string password { get; set; }
public string leftMember { get; set; } = "";
public string rightMember { get; set; } = "";
}
用户登录验证:
[HttpPost]
public async Task<IActionResult> Auth(string username, string password)
{
var findingFeni = context.User.Where(n => n.userName == username && n.password == password).FirstOrDefault();
if(findingFeni == null)
{
return Content("user or password is incorrect");
}
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username)
};
var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties
{
};
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity), authProperties);
return RedirectToAction("Index");
}
添加左右成员/节点:
public async Task<IActionResult> addMyLeftMember(int userId)
{
TempData["LeftMemberUserId"] = userId;
return RedirectToAction("RegisterLeftMember");
}
public async Task<IActionResult> addMyRightMember(int userId)
{
TempData["RightMemberUserId"] = userId;
return RedirectToAction("RegisterRightMember");
}
public async Task<IActionResult> AddMemberLeft(UserModel userModel)
{
UserModel usr = context.User.Where(n => n.userName == userModel.userName).FirstOrDefault();
if(usr != null)
{
return Content("user already exist");
}
int userID = int.Parse(TempData["LeftMemberUserId"].ToString());
var findingDaddy = context.User.Where(n => n.userId == userID).FirstOrDefault();
findingDaddy.leftMember = userModel.userName;
context.User.Add(userModel);
await context.SaveChangesAsync();
return RedirectToAction("Index");
}
public async Task<IActionResult> AddMemberRight(UserModel userModel)
{
UserModel usr = context.User.Where(n => n.userName == userModel.userName).FirstOrDefault();
if (usr != null)
{
return Content("user already exist");
}
int userID = int.Parse(TempData["RightMemberUserId"].ToString());
var findingDaddy = context.User.Where(n => n.userId == userID).FirstOrDefault();
findingDaddy.rightMember = userModel.userName;
context.User.Add(userModel);
await context.SaveChangesAsync();
return RedirectToAction("Index");
}
在索引中获取用户数据我正在获取所有用户数据,但您只能获取将完成工作的登录用户数据。
public IActionResult Index()
{
List<UserModel> users = context.User.ToList();
string name = User.Identity.Name;
if(name == null || name.Equals(""))
{
name = "admin";
}
List<UserModel> newUserList = users.Where(user => String.Compare(user.userName, User.Identity.Name) >= 0).ToList();
return View(newUserList);
}
索引页:
@inject TASK_1._1.Context.ApplicationDbContext context
@model List<UserModel>
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
@if (Model != null && Model.Count() > 0)
{
<table border="1" class="text-center">
@foreach (var user in Model)
{
@Html.Partial("_UserNodeView", user)
break;
}
</table>
}
</div>
查看:
@inject TASK_1._1.Context.ApplicationDbContext context
@model UserModel
@*
*@
@{
}
<table border="1" class="text-center">
<a> @Model.userName </a>
<tr>
<td>
@if (Model.leftMember.Equals(""))
{
<div>
<form asp-controller="Home" asp-action="AddMyLeftMember" method="post">
<button class="btn btn-primary" type="submit" asp-action="AddMyLeftMember" asp-route-userId="@Model.userId"> Left </button>
</form>
</div>
}
else
{
var u = context.User.Where(n => n.userName == Model.leftMember).FirstOrDefault();
@Html.Partial("_UserNodeView", u)
}
</td>
<td>
@if (Model.rightMember.Equals(""))
{
<div>
<form asp-controller="Home" asp-action="AddMyRightMember" method="post">
<button class="btn btn-primary" type="submit" asp-action="AddMyRightMember" asp-route-userId="@Model.userId"> Right </button>
</form>
</div>
}
else
{
var u = context.User.Where(n => n.userName == Model.rightMember).FirstOrDefault();
@Html.Partial("_UserNodeView", u)
}
</td>
</tr>
</table>