【发布时间】:2015-10-24 03:13:52
【问题描述】:
我对这个越来越绝望。我从 Web 服务接收树数据结构并尝试提出浏览器和搜索功能。为了浏览结构,我使用了一个包含列表视图的更新面板,其中包括指向结构子级别的链接按钮(类似于文件夹资源管理器视图)。 问题是链接按钮仅适用于第一个子级别,当在子文件夹中链接按钮不会触发相应的功能而只会重新加载页面。
例子:
结构:
Root
- Folder 1
- Folder A
- Folder B
- Folder b1
- Folder b2
- Folder b3
- Folder c
- Folder D
- Folder 2
- Folder 3
页面加载:
- Folder 1
- Folder 2
- Folder 3
点击文件夹 1:
- Folder A
- Folder B
- Folder c
- Folder D
点击文件夹 B 重新加载带有根结构的页面而不是加载:
- Folder b1
- Folder b2
- Folder b3
apsx 页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="TMSD4CJ._default" ClientIDMode="AutoID"%>
<%@ Register TagPrefix="sb" TagName="SearchBox" Src="~/Controls/SearchBox.ascx" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset="utf-8" />
</head>
<body>
<form id="form1" runat="server">
<div class="container">
<asp:ScriptManager ID="SM" runat="server" EnablePartialRendering="true" />
<asp:UpdatePanel ID="upnl" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:ListView ID="lstView_entries" runat="server" OnItemDataBound="lstView_entries_ItemDataBound">
<LayoutTemplate>
<table class="table table-hover">
<tr id="ItemPlaceholder" runat="server">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><asp:LinkButton runat="server" ID="lbtn_entryName" OnCommand="lbtn_entryName_Click" CommandArgument=""></asp:LinkButton></td>
</tr>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
CS 页面:
protected void lstView_entries_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
LinkButton lbtnEntryName = (LinkButton)e.Item.FindControl("lbtn_entryName");
var itemType = e.Item.DataItem.GetType();
if(itemType == typeof(Catalog))
{
Catalog currentItem = e.Item.DataItem as Catalog;
lbtnEntryName.Text = currentItem.Name;
lbtnEntryName.ToolTip = currentItem.Id;
lbtnEntryName.CommandArgument = currentItem.Id;
System.Diagnostics.Debug.WriteLine("Set Name: " + currentItem.Name + " Set ID: " + currentItem.Id);
}
SM.RegisterAsyncPostBackControl(lbtnEntryName);
}
}
protected void lbtn_entryName_Click(object sender, CommandEventArgs e)
{
Catalog rootCat = (Catalog)ViewState["catalogueEntries"];
List<object> catalogueEntries = new List<object>();
Catalog catFound = searchCatalogByID(rootCat, e.CommandArgument.ToString());
lstView_entries.DataSource = catalogueEntries;
lstView_entries.DataBind();
}
【问题讨论】:
标签: asp.net updatepanel postback linkbutton