延迟加载是计算机编程中常用的设计模式,用于将对象的初始化推迟到需要它的点。
我正在尝试使用 c# 和 asp.net 动态创建树视图。 我使用 populate ondemand 属性创建了一个延迟加载树视图。 > 我正在尝试使用 c# 和 asp.net 动态创建树视图。 我使用 populate ondemand 属性创建了一个延迟加载树视图。 > <asp:TreeView ID="treeView1" runat="server" > OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView> 在代码后面,我已经加载了数据,但最初我填充了父节点。我想要实现的是,当我单击父节点时,我会进行回发,然后填充其子节点,然后再次填充其子节点,等等。我有数千个数据,因此由于性能原因,我不希望填充所有数据。这就是为什么我只想根据所选节点填充节点子节点的原因。请参阅下面的示例: >Peter - - >user1 - - >user2 - - >user3 - - >userPassword - - >userId >john >david >Jack - - >user1 - - >user2 - - >userpassword - - >userId - - >Permissions >Laura - - > admin - - > permissions -- > user1 -- > user2 - - >userpassword - - >userId - - >Permissions >... >... >... 如您所见,可以有多个父节点和多个层。这些将根据我传递给数据库的内容动态填充。每次我单击节点时,它都会展开节点并使用回发填充其子级,然后当您再次单击其子级时,它将执行回发并再次填充其子级等。所以我需要有关如何创建动态树视图的帮助。 c#: private void LoadTreeview() { //Load data // Get data from DB. //loop through the list and build its parent nodes. foreach (var dxm in list) { TreeNode tnParent = CheckNodeExist(dxm.Node); //I check to see if exists. if (tnParent== null) { TreeNode tn = new TreeNode(); tn.Text = dxm.Node; tn.Value = dxm.Id.ToString(); tn.SelectAction = TreeNodeSelectAction.None; tn.Collapse(); treeView1.Nodes.Add(tn); tn.PopulateOnDemand = true; //lazy load tnParent= tn; } } 上面的方法在页面加载时调用。 在 TreeNodePopulateEvent 上:(单击节点时) protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e) { ICollection<ITEMS> list = new Collection<ITEMS>(); list = GetData(e.Node.Text); //pass in the node you have selected this will go and check in DB if the node does have any child nodes. If so will return with child nodes. foreach (var dxm in list) { TreeNode tnChild = CheckNodeExist(dxm.Node); if (tnChild == null) { TreeNode tn = new TreeNode(); tn.Text = dxm.Node; tn.Value = dxm.Id.ToString(); tn.SelectAction = TreeNodeSelectAction.None; tn.Collapse(); tn.PopulateOnDemand = true; tnChild = tn; tnChild.ChildNodes.Add(tnChild); } } } 我相信您正在寻找 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>
使用“ngOptimizedImage”时是否可以有“background-attachment:fixed”类型行为?
我正在使用 Angular (v17) 并尝试按照文档实现图像的延迟加载,文档说 “NgOptimizedImage 不直接支持背景图像 css 属性,但它是
我有一个 Angular 17 应用程序,它使用独立组件,初始路由的设置就像在 app.routes.ts 中一样 导出 const appRoutes: Array = [ { 路径:'',重定向到:'/
为什么我们使用Pagination而不是Lazy {}来加载数据?
我在 YouTube 上观看了有关在 jetpack compose 中创建 Pokedex 应用程序的视频。我想知道哪个更容易且适合加载数据。 这是该视频的链接:https://youtu.be/jrIfGAk8PyQ?si=
如何将 Angular 服务包含在延迟加载的独立组件路由中?
我有一个使用独立组件的 Angular 17 应用程序,初始路由的设置就像 app.routes.ts 中一样 导出 const appRoutes: Array = [ { 路径:'',redirectTo:'/dashb...
除了手动创建之外,还有什么方法可以在 Angular-CLI 应用程序中生成新模块时创建routing.module.ts? 我最近开始在我的应用程序中实现延迟加载并且......
6月份Chrome添加了对loading属性的支持,但它对我不起作用。 当图像不在视口中时正在加载图像。 DevTools 中我的网络信息 用户代理:Chrome/75.0.3770.80 已启用...
我列出了问题(模型中约有 1000 个问题)。 我想在用户向下滚动将呈现接下来的 100 个问题后首先呈现 100 个问题。 你知道怎么做吗?
假设我在 python 中有这个字典,在模块级别定义(mysettings.py): 设置={ 'expcious1' : 昂贵的计算(1), 'expcious2' : 昂贵的计算(2), ......
通过 ThreadPoolTaskScheduler 计划任务中的 Spring JPA 从数据库获取延迟初始化列表
我在使用 JPA 和 Spring 从数据库获取一些惰性数据时遇到了一些问题。 我必须为将来安排一些数据库操作,但是当它们实际运行时,我得到了
我正在尝试在 Angular 中实现子路由的延迟加载,但遇到了问题。这是相关代码: 在应用程序路由.模块中: { 路径: '报告', loadChildren: () => 我...
我在 React JS 中遇到 Suspense 问题。 图片胜千言: 第一状态 第二状态,悬念后备被清除 第三种状态,最后 - 组件已加载 该应用程序呈现苏...
Angular 14 中 ng2-pdf-viewer 的延迟加载
我正在使用 Angular 14 中的 ng2-pdf-viewer 更新版本(9.1.5)加载包含 16 页的 pdf。 我想对这个PDF使用延迟加载,我需要做什么概念? 我用的是缩略图
我将 i18next 与 React 结合使用,并拥有三种语言文件(阿拉伯语、英语和法语)。目前,当用户请求该网站时,我正在加载所有三个翻译文件,这感觉太多了......
如何解决 Ubuntu 20 或 22 版本上 Neovim 和 LazyVim 之间的版本问题
我无法安装 0.8 版本以下的 LazyVim for Nvim。 # 必需的 `mv ~/.config/nvim{,.bak}` # 可选但推荐 `mv ~/.local/share/nvim{,.bak} mv ~/.local/state/nvim{,.bak} MV ~/...
在 Prime faces 数据表中延迟加载时如何在分页后保留选择列表和复选框?
我在prime faces数据表上实现了延迟加载。它工作正常,但是当页面更改时,选择会被清除。当页面更改时如何保留其他页面的选择...
如何修复 org.hibernate.LazyInitializationException:未能延迟初始化角色集合:信息,无法初始化代理 - 无会话
我的 Spring Boot 项目中有一个客户和一个客户信息实体。他们有一对多的关系。 @数据 @Builder @实体 @NoArgs构造函数 @AllArgsConstructor @Table(name = "客户...
如何在 SPIP 中的#TEXTE 中为 img 添加lazy="loading"属性
在 Spip 4.2 中,我尝试自动向 #TEXTE 中的所有 添加 loading="lazy" 属性,以在我的文章中实现延迟加载。 我尝试查找并替换“im...
我有一个用于添加项目的存储库,当我从数据库中检索所有项目时,除了最后添加的项目之外,所有项目都表示为“Castle.Proxies.ProjectProxy”。我想知道为什么...