我有一个asp:DataGrid,它有列和另一个asp:DataGrid嵌套在其中。这正确显示了我的数据。我被要求更改内容,以便嵌套数据网格中的数据显示为链接,以便在选中时显示关联的文件内容。下面显示的是标记的一部分。它显示嵌套的数据网格,隐藏字段和显示为链接的文件名。我有一个名为“viewFile”的javascript函数(未显示),它显示了它希望传递给fileId的文件。选择链接后,将调用viewField函数,但不会将fileId传递给它。我假设javascript“javascript:viewFile($('#hdFileId')。val()”没有找到隐藏字段。任何人都可以建议我这样做是错误还是他们可以帮助提供正确的javascript?< / p>
<asp:TemplateColumn HeaderText="Files" >
<ItemTemplate>
<asp:DataGrid ID="dgFileList" runat="server" AutoGenerateColumns="false" ShowHeader="False" GridLines="None">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:HiddenField runat="server" ID="hdFileId" Value='<%# DataBinder.Eval(Container.DataItem, "FileId") %>'/>
<a href="javascript:viewFile($('#hdFileId').val())"><%# DataBinder.Eval(Container.DataItem, "FileName") %></a>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</ItemTemplate>
==== EDIT =====================
以下是datagrid标记的整个部分:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div style="float: left; width: 100%; padding-top: 20px;">
<asp:DataGrid AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" AllowCustomPaging="True" Width="90%"
CellPadding="2" CellSpacing="2" DataKeyField="AccountNumber" UseAccessibleHeader="true"
GridLines="None" HeaderStyle-CssClass="grid_header" ID="dgFileView" OnItemCommand="dgFileView_OnItemCommand" OnItemDataBound="dgFileList_ItemDataBound"
OnPageIndexChanged="MyDataGrid_Page"
runat="server" ShowHeaderWhenEmpty="True"
PageSize="18"
PagerStyle-Mode="NumericPages"
PagerStyle-PageButtonCount="20"
PagerStyle-ForeColor="Navy"
PagerStyle-HorizontalAlign="right"
ItemStyle-VerticalAlign="top">
<Columns>
<asp:TemplateColumn HeaderText="Company" SortExpression="SortByCompany">
<HeaderStyle CssClass="grid_header_cell" />
<ItemStyle CssClass="grid_item_no_edit" />
<ItemTemplate>
<asp:Label ID="lblCompany" runat="server" Text='<%#Eval("Company")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Distribution Group" SortExpression="SortByDistributionGroup">
<HeaderStyle CssClass="grid_header_cell" />
<ItemStyle CssClass="grid_item_no_edit" />
<ItemTemplate>
<asp:Label ID="lblEnrolmentDevice" runat="server" Text='<%#Eval("DistributionGroup")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Account ID" >
<HeaderStyle CssClass="grid_header_cell" />
<ItemStyle CssClass="grid_item_no_edit" />
<ItemTemplate>
<asp:Label ID="lblAccountId" runat="server" Text='<%#Eval("AccountNumber")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Files" >
<HeaderStyle CssClass="grid_header_cell" />
<ItemStyle CssClass="grid_item_no_edit" />
<ItemTemplate>
<asp:DataGrid ID="dgFileList" runat="server" AutoGenerateColumns="false" ShowHeader="False" GridLines="None">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:HiddenField runat="server" ID="hdFileId" Value='kkk'/>
<a href="javascript:viewFile($('#<%= hdFileId.ClientID %>').val())" style="color: blue; text-decoration: none"><%# DataBinder.Eval(Container.DataItem, "FileName") %></a>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</div>
</ContentTemplate>
答案 0 :(得分:1)
ASP元素的ID与创建的html元素的ID不同。您可以使用 yourElement.ClientID
来获取它在jQuery中,获取你的元素:
$('#<%= hdFileId.ClientID %>').val()
或在经典JavaScript中:
document.getElementById('<%= hdFileId.ClientID %>').value
=======编辑========
好的,我明白了。您的HiddenField是GridView,因此您有(行数)隐藏字段。因此您无法访问唯一的HiddenField。 要访问每个HiddenField,您必须在RowDataBound方法中执行此操作:
protected void dgFileList_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
(HiddenField) hdFileId = (HiddenField) e.Row.FindControl("hdFileId");
}
}
在您的情况下,您应该添加<asp:LinkButton>
而不是html链接元素<a>
,然后您可以在代码隐藏中访问以为每个HiddenField设置LinkButton的HREF。 / p>
另一个解决方案是不使用HiddenField(这是一个ASP元素),因为你必须通过代码隐藏。但是,您可以使用<span>
设置为style="display:none"
的{{1}}不可见,并且可以直接在您的JavaScript代码中访问。
希望它有所帮助。