【发布时间】: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]”替换了实际数据,因为它是明智的信息。
这是两种情况下生成的标签和隐藏字段的样子。我再次用“[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 中检查回发的原因。