动态创建树视图

问题描述 投票:0回答:2
c# asp.net architecture treeview lazy-loading
2个回答
6
投票

我相信您正在寻找 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);
    }
}

0
投票

也许这个例子会对你有所帮助,我正在使用 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> 
© www.soinside.com 2019 - 2024. All rights reserved.