Javascript在数据网格中查找隐藏的字段值

时间:2014-10-28 09:00:02

标签: javascript asp.net datagrid

我有一个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>

1 个答案:

答案 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设置LinkBut​​ton的HREF。 / p>

另一个解决方案是不使用HiddenField(这是一个ASP元素),因为你必须通过代码隐藏。但是,您可以使用<span>设置为style="display:none"的{​​{1}}不可见,并且可以直接在您的JavaScript代码中访问。

希望它有所帮助。