首页 > 解决方案 > Asp:Label 从本地主机上的 HiddenField 获取值,但不是在实时版本上

问题描述

我正在asp.net 中开发一个网站。在其中一页上,我初始化了一个转发器,其中包含多个 HiddenFields。

在转发器之外,在我的页面加载期间,我使用从那些隐藏字段中获取的文本值在特定的转发器项中初始化标签。在 localhost 中进行测试不会导致任何问题。然而,在实时版本中,我注意到其中一个标签没有显示任何值,尽管链接到它的 HiddenField 确实保存了想要的值。

以下是相关页面的代码示例:

aspx:

<form id="detailForm" runat="server">
    <asp:ScriptManager ID="ScriptManagerGlobal" runat="server" EnableScriptGlobalization="true" />
    <table>
        <tr>
            <th>Code d'Activation</th>
            <td>
                <asp:Label ID="L_Code_Activation" runat="server" />
            </td>
        </tr>
        <tr>
            <th>Dernière action </th>
            <td>
                <asp:Label ID="L_Libelle_Actuel" runat="server" />
            </td>
        </tr>
    </table>
    <br />
    <asp:UpdatePanel ID="UP_KSS" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <table>
                <asp:Repeater ID="RepeaterContainer" runat="server">
                    <HeaderTemplate>
                        <tr>
                            <th>Date de Requète
                            </th>
                            <th>Action
                            </th>
                        </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:HiddenField ID="HF_Id_kss_container" runat="server" Value='<%#Eval("id_kss_container") %>' />
                        <tr>
                            <td>
                                <asp:HiddenField runat="server" ID="CodeActivationHidden" Value='<%# Eval("CodeActivation") %>' />
                                <asp:Label ID="L_DateRequest" runat="server" Text='<%# LaDate(Eval("DateRequest")) %>' />
                            </td>
                            <td>
                                <asp:HiddenField runat="server" ID="LibelleHidden" Value='<%# (LOperation(Eval("Libelle"))) %>' />
                                <asp:Label ID="L_Libelle" runat="server" Text='<%#(LOperation(Eval("Libelle"))) %>' />
                            </td>
                        </tr>
                    </ItemTemplate>
                </asp:Repeater>
            </table>
        </ContentTemplate>
    </asp:UpdatePanel>
</form>

(请注意:“LOOperation”和“LaDate”方法只是改变了“Eval”返回值的格式。它们不应该影响其余的代码。)

.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
    {
        initRepeaterContainer(); //
        initLabels();
    }

protected void initLabels()
    {
        // L_Libelle_Actuel
        Label lblLibelleActuel = (Label)detailForm.FindControl("L_Libelle_Actuel");
        HiddenField hfLibelleHidden = (HiddenField)(RepeaterContainer.Items[0].FindControl("LibelleHidden"));
        lblLibelleActuel.Text = hfLibelleHidden.Value;

        // L_Code_Activation
        Label lblCodeActivation = (Label)detailForm.FindControl("L_Code_Activation");
        HiddenField hfCodeActivationHidden = (HiddenField)(RepeaterContainer.Items[(RepeaterContainer.Items.Count)-1].FindControl("CodeActivationHidden"));
        lblCodeActivation.Text = hfCodeActivationHidden.Value;
    }

这是问题所在:在 localhost 中运行时,页面运行良好,并且此处的两个标签都显示了预期值。但是,在直播网站上运行时,只有“L_Libelle_Actuel”标签显示正确的值。

“L_Code_Activation”标签仅转换为 id="L_Code_Activation" 的空范围。奇怪的是,在检查结果页面时,我可以看到预期值存在于链接到该标签的 Hiddenfield 中。

有谁知道为什么会发生这个问题,以及为什么它不会在 localhost 上发生?我进行了广泛的搜索,但没有看到任何人遇到同样的问题,也无法在本地环境中重现它。如果您知道是什么原因造成的,您知道如何解决吗?

谢谢,祝你有美好的一天。

编辑:忘了说,虽然这似乎是一件小事,但在查看我的导航器的开发控制台时,我没有收到任何错误或警告。就像标签从未初始化过一样。

编辑2:这是结果的样子。我用“[value]”替换了实际数据,因为它是明智的信息。

在本地主机上

在直播网站上

这是两种情况下生成的标签和隐藏字段的样子。我再次用“[value]”替换了预期的数据。

本地主机:

<span id="L_Code_Activation">[value]</span> 
...
<input type="hidden" name="RepeaterContainer$ctl01$CodeActivationHidden" id="RepeaterContainer_CodeActivationHidden_0" value="[value]">

直播网站:

<span id="L_Code_Activation"></span>
...
<input type="hidden" name="RepeaterContainer$ctl01$CodeActivationHidden" id="RepeaterContainer_CodeActivationHidden_0" value="[value]">

编辑3:问题实际上来自服务器本身,而不是代码。我应该先检查那里,对不起...

标签: c#asp.netwebforms

解决方案


为什么不在pageload 上发出ajax 请求?在服务器端更新数据并不总是一个好主意。

所以我建议你这样做: - 在你的 aspx.cs 文件中,添加一个函数来初始化模型并返回模型的 JSON 流。- 在您的 js 文件中添加一个将调用您的函数(aspx.cs)的 ajax 请求。通过它的结果,您应该能够刷新您的组件。

你可以参考这个:https ://www.w3schools.com/asp/asp_ajax.asp


推荐阅读