在嵌套在 Jquery 的另一个 ListView 中的 ListView 中查找超链接
Find a hyperlink in a ListView nested within anothe ListView with Jquery
我需要一个像这样的解决方案 我需要 select 的 link 在一个 ListView 中,该 ListView 在另一个 ListView 中分组。
我不断收到的错误是“Object reference not set to an instance of an object
”
<asp:ListView ID="lstViewSharedFolder" runat="server" OnItemDataBound="lstViewSharedFolder_ItemDataBound">
<ItemTemplate>
<tr class="alert-info">
<td><strong>Folder ID</strong>:
<%# Eval( "FolderID") %>
</td>
<td><strong>Folder Name</strong>:
<%# Eval( "SharedFolderName") %>
</td>
<td><strong>Security Score</strong>:
<%# Eval( "Score") %>
</td>
</tr>
<tr>
<td colspan="3">
<asp:ListView ID="lstViewUsers" runat="server" OnItemDataBound="lstViewUsers_ItemDataBound">
<ItemTemplate>
<tr>
<td>
<asp:HyperLink ID="lnkUsername" runat="server">
<%# Eval( "UserName") %>
</asp:HyperLink>
</td>
<td>
<%# Eval( "ReadOnly") %>
</td>
<td>
<%# Eval( "Give") %>
</td>
<td>
<%# Eval( "CanAdminister") %>
</td>
<td>
<%# Eval( "GroupName") ?? "n/a" %>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#<%= ((HyperLink)((ListView)lstViewSharedFolder.FindControl("lstViewUsers")).FindControl("lnkUsername")).ClientID %>').click(function() {
var id = $(this).attr("id"); // Get the ID
alert(id);
console.log(id);
});
});
</script>
编辑
我想我知道为什么。我在绑定 SharedFolder 项目时绑定了 Users ListView 控件,因此该控件可能尚不存在。有没有更好更有效的方法来做到这一点?我的目标是在单击 link 时显示带有用户详细信息的弹出窗口。
var folderList = $('#<%= lstViewSharedFolder.ClientID %>');
<!-- This causes the error -->
var userList = $('#<%= ((ListView)lstViewSharedFolder.FindControl("lstViewUsers")).ClientID %>');
这是我的 lstViewSharedFolder_ItemDataBound()。
protected void lstViewSharedFolder_ItemDataBound(object sender, ListViewItemEventArgs e)
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var folder = (SharedFolder)dataItem.DataItem;
var users = folder.Users;
var lstView = (ListView)e.Item.FindControl("lstViewUsers");
lstView.DataSource = users;
lstView.DataBind();
}
}
这里不需要把事情复杂化。只需给 LinkButton 一个 CssClass。
<asp:HyperLink ID="lnkUsername" runat="server" CssClass="my_link">
<%# Eval( "UserName") %>
</asp:HyperLink>
并这样称呼它
var userList = $('.my_link');
我需要一个像这样的解决方案 我需要 select 的 link 在一个 ListView 中,该 ListView 在另一个 ListView 中分组。
我不断收到的错误是“Object reference not set to an instance of an object
”
<asp:ListView ID="lstViewSharedFolder" runat="server" OnItemDataBound="lstViewSharedFolder_ItemDataBound">
<ItemTemplate>
<tr class="alert-info">
<td><strong>Folder ID</strong>:
<%# Eval( "FolderID") %>
</td>
<td><strong>Folder Name</strong>:
<%# Eval( "SharedFolderName") %>
</td>
<td><strong>Security Score</strong>:
<%# Eval( "Score") %>
</td>
</tr>
<tr>
<td colspan="3">
<asp:ListView ID="lstViewUsers" runat="server" OnItemDataBound="lstViewUsers_ItemDataBound">
<ItemTemplate>
<tr>
<td>
<asp:HyperLink ID="lnkUsername" runat="server">
<%# Eval( "UserName") %>
</asp:HyperLink>
</td>
<td>
<%# Eval( "ReadOnly") %>
</td>
<td>
<%# Eval( "Give") %>
</td>
<td>
<%# Eval( "CanAdminister") %>
</td>
<td>
<%# Eval( "GroupName") ?? "n/a" %>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
</td>
</tr>
</ItemTemplate>
</asp:ListView>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#<%= ((HyperLink)((ListView)lstViewSharedFolder.FindControl("lstViewUsers")).FindControl("lnkUsername")).ClientID %>').click(function() {
var id = $(this).attr("id"); // Get the ID
alert(id);
console.log(id);
});
});
</script>
编辑 我想我知道为什么。我在绑定 SharedFolder 项目时绑定了 Users ListView 控件,因此该控件可能尚不存在。有没有更好更有效的方法来做到这一点?我的目标是在单击 link 时显示带有用户详细信息的弹出窗口。
var folderList = $('#<%= lstViewSharedFolder.ClientID %>');
<!-- This causes the error -->
var userList = $('#<%= ((ListView)lstViewSharedFolder.FindControl("lstViewUsers")).ClientID %>');
这是我的 lstViewSharedFolder_ItemDataBound()。
protected void lstViewSharedFolder_ItemDataBound(object sender, ListViewItemEventArgs e)
{
ListViewDataItem dataItem = (ListViewDataItem)e.Item;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var folder = (SharedFolder)dataItem.DataItem;
var users = folder.Users;
var lstView = (ListView)e.Item.FindControl("lstViewUsers");
lstView.DataSource = users;
lstView.DataBind();
}
}
这里不需要把事情复杂化。只需给 LinkButton 一个 CssClass。
<asp:HyperLink ID="lnkUsername" runat="server" CssClass="my_link">
<%# Eval( "UserName") %>
</asp:HyperLink>
并这样称呼它
var userList = $('.my_link');