【问题标题】:Unable to get hiddenfield value inside javascript function无法在 javascript 函数中获取隐藏字段值
【发布时间】:2018-06-06 10:39:26
【问题描述】:

这是我的场景, 我在页面中有一个按钮和一个下拉列表。单击该按钮后,我需要打开 Telerik 的 radwindow。在那个窗口里面我有一个gridview,并且在那个grid里面我需要显示hiddenfield的数据。够简单!!

这是我对 radwindow 和网格的标记(隐藏字段在 contenttemplate 内)..

<telerik:RadWindow ID="rw_UoMGroupDetails" runat="server" AutoSize="true" MaxHeight="260px" MinWidth="500px" Behaviors="Close,Move" Modal="true" CenterIfModal="true" VisibleTitlebar="true"
    Title="Group Definition" BorderStyle="None" VisibleStatusbar="false" RestrictionZoneID="MainArea">
    <ContentTemplate>
        <asp:HiddenField runat="server" ID="hfUoMComb" />
        <asp:UpdatePanel ID="Updatepanel2" runat="server" UpdateMode="Always">
            <ContentTemplate>
                <telerik:RadAjaxPanel ID="RadAjaxPanel3" LoadingPanelID="RadAjaxLoadingPanel1" runat="server">
                    <telerik:RadGrid ID="rgv_UoMDetails" runat="server" OnNeedDataSource="rgv_UoMDetails_NeedDataSource" Width="100%"
                        Height="220px" ItemStyle-Wrap="false" HeaderStyle-Wrap="false" SelectedItemStyle-BackColor="#003366"
                        OnPreRender="rgv_UoMDetails_PreRender" OnBatchEditCommand="rgv_UoMDetails_BatchEditCommand">
                        <GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings>
                        <MasterTableView CommandItemDisplay="Top" ShowHeadersWhenNoRecords="true" EditMode="Batch"
                            AutoGenerateColumns="False" DataKeyNames="UoMGID" TableLayout="Fixed">
                            <BatchEditingSettings EditType="Row" />
                            <Columns>
                                <telerik:GridNumericColumn DataField="AltQty" DecimalDigits="5" HeaderText="Alt. Qty" HeaderStyle-Width="100px"
                                    UniqueName="AltQty" ItemStyle-HorizontalAlign="Right">
                                </telerik:GridNumericColumn>
                                <telerik:GridTemplateColumn DataField="UoMID" HeaderText="Alt. UoM" HeaderStyle-Width="120px"
                                    UniqueName="AltUoMID">
                                    <ItemTemplate>
                                        <%#Eval("AltUoMCode") %>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <telerik:RadComboBox ID="cmbx_AltUoM" runat="server" Width="100%" Filter="Contains" MarkFirstMatch="true"
                                            OnClientDropDownOpening="onUoMComboItemRequesting">
                                        </telerik:RadComboBox>
                                    </EditItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridTemplateColumn HeaderStyle-Width="20px" ItemStyle-HorizontalAlign="Center">
                                    <ItemTemplate>
                                        <span>=</span>
                                    </ItemTemplate>
                                </telerik:GridTemplateColumn>
                                <telerik:GridNumericColumn DataField="BaseQty" DecimalDigits="5" HeaderStyle-Width="100px" HeaderText="Base Qty"
                                    UniqueName="BaseQty" ItemStyle-HorizontalAlign="Right">
                                </telerik:GridNumericColumn>
                                <telerik:GridBoundColumn DataField="BaseUoMCode" HeaderStyle-Width="100px" FilterControlAltText="Filter BaseUoMCode column"
                                    HeaderText="Base UoM" UniqueName="BaseUoMCode" ReadOnly="true" DefaultInsertValue="Kg">
                                </telerik:GridBoundColumn>
                            </Columns>
                            <CommandItemSettings AddNewRecordText="" CancelChangesText="" SaveChangesText="" RefreshText="" />
                        </MasterTableView>
                        <ClientSettings AllowKeyboardNavigation="true">
                            <ClientEvents OnBatchEditOpening="BatchEditOpening"></ClientEvents>
                            <Scrolling AllowScroll="true" UseStaticHeaders="true" ScrollHeight="220px" SaveScrollPosition="true" />
                            <Resizing AllowColumnResize="true"></Resizing>
                        </ClientSettings>
                    </telerik:RadGrid>
                </telerik:RadAjaxPanel>
            </ContentTemplate>
        </asp:UpdatePanel>
    </ContentTemplate>
</telerik:RadWindow>

好的,现在让我告诉你我在哪里设置隐藏字段的数据..

protected void imgbtn_UoMGroupDef_Click(object sender, ImageButtonClickEventArgs e)
        {
            ViewState["UoMGID"] = cmbx_UoMGGroup.SelectedValue;
            hfUoMComb.Value = cmbx_InventoryUoM.SelectedItem.Text;

现在我正在调用此网格的客户端事件,我想在其中显示该隐藏字段的数据。

<script type="text/javascript">
        function BatchEditOpening(sender, args) {
            debugger;
            for (var i = 0; i < args._tableView._dataItems.length; i++) {
                args._tableView._dataItems[0]._element.cells[4].innerText = document.getElementById('<%= hfUoMComb.ClientID%>').value;
        }
    }
    </script>

这里我得到空字符串:(!我该如何解决这个问题?

【问题讨论】:

    标签: javascript asp.net hidden-field


    【解决方案1】:

    这是因为webforms通过添加随机字符串来渲染隐藏字段的id

    要保留您的id,您需要添加ClientIDMode="Static"

    您应该使用ClientID 属性来设置您的id

    【讨论】:

    • document.getElementById('').value ,这不是问题先生 :)
    • @Nody 使用它会导致代码的可读性降低。此外,您的 JS 代码必须在表单或控件中。使用clientdidmode=static,您可以将所有JS代码放在一个单独的文件中。
    猜你喜欢
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多