【问题标题】:Asp:Label obtaining value from HiddenField on localhost but not on live versionAsp:Label 从本地主机上的 HiddenField 获取值,但不是在实时版本上
【发布时间】:2019-07-26 22:22:16
【问题描述】:

我正在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]”替换了实际数据,因为它是明智的信息。

On localhost

On live website

这是两种情况下生成的标签和隐藏字段的样子。我再次用“[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:问题实际上来自服务器本身,而不是代码。我应该先检查那里,对此感到抱歉......

【问题讨论】:

  • 由于您检索代码激活值的方式与检索 libelle 值的方式不同,我想知道这是否与数据有关。正在从最后一个中继器项目中检索代码激活,可能是本地记录比现场记录少吗?你能告诉我们渲染的输出吗?
  • 嗨!尽管我有几个问题要澄清这个问题,但我没有立即看到代码中有任何错误。您将多少项数据绑定到转发器?您要从第一行获取实际值,从最后一行获取激活值?此外,您没有在页面加载中检查 Page.IsPostBack,这是设计使然,您想在每次回发时再次进行数据绑定吗?
  • @Gabe 我尝试从中继器的第一个、最后一个或任何其他项目中检索信息。没有任何变化,所以这不是问题的根源。
  • @Esko 数据绑定的项目数量各不相同,从单个条目到 6 个或更多。我确实想对每个回发进行数据绑定,这就是为什么我没有在我的 Pageload 中检查回发的原因。

标签: c# asp.net webforms


【解决方案1】:

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

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

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

【讨论】:

  • 我不确定我是否理解,但这可能是因为我以前从未使用过 Ajax。如果我做对了,我应该发出一个 Ajax 请求来调用初始化我的标签的代码隐藏函数吗? (initLabel) 这样做和简单地在 pageload 方法中调用我的函数有什么区别?
  • ASP 有一个页面生命周期,它在页面加载时初始化您的对象。在此期间,页面会显示其组件,因此在页面加载时可能很难初始化您的组件(参考:tutorialspoint.com/asp.net/asp.net_life_cycle)。这就是为什么我建议你通过 ajax 请求传递。是的,你明白了。 ajax 请求将在您的代码隐藏文件 (aspx.cs) 中调用一个函数。因此,需要明确的是,当您在 ajax 请求中调用函数时,您必须获取 json 结果并设置标签的值
  • 我认为 WebForms 页面生命周期根本不会影响这个问题。没有理由这不应该工作,实际上是在他的本地机器上工作。
  • 另一个选项是他的 IIS 太旧而无法加载他的组件。至少,Ajax 请求肯定会解决他的问题
【解决方案2】:

其实请忽略这个问题。问题不在于代码,而在于服务器本身。刚开始没有查问题的根源,很抱歉浪费您的时间。

【讨论】:

  • 只是出于好奇,那是什么?
  • 我不是设置服务器的人,我只是被告知将文件放在哪里。我对这些文件进行了许多更改,并且服务器在每次更改时重新编译代码隐藏文件,所以我认为这是理所当然的。今天我做了更多的修改,包括对那些标签的一些修改,由于某种原因,服务器没有重新编译代码隐藏文件,保留了昨天的旧版本。我很笨,再次抱歉。
猜你喜欢
  • 2012-01-23
  • 2011-03-23
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多