ASP:放置在Repeater的ItemTemplate中时不在上下文中的文字

时间:2015-06-10 14:24:36

标签: c# asp.net

我有一个asp.net页面的行为与同行不同,我似乎无法找出原因。

可悲的是,出于商业原因,我无法发布大量代码,而且我知道这会限制用户的协助能力。

我有一个页面,其中包含隐藏的复选框和其他不重要的内容。

类似的东西:

<asp:Repeater id="GoodRepeater" runat="server" OnItemDataBound="GoodRepeater_OnItemDataBound">
  <ItemTemplate>
    <asp:Literal id="litHappyLiteral" runat="server" />
    <!-- Other junk that doesn't matter -->
  </ItemTemplate>
</asp:Repeater>

在另一个页面上,我有相同的设置,但出于某种原因,每当我放入ItemTemplate时,它就会从我的上下文中删除,并且代码隐藏不再能够到达。例如:

<asp:Repeater id="RepeaterThatMakesMeSad" runat="server" OnItemDataBound="RepeaterThatMakesMeSad_OnItemDataBound">
  <ItemTemplate>
    <asp:Literal id="litSadLiteral" runat="server" />
    <!-- Other junk that doesn't matter -->
  </ItemTemplate>
</asp:Repeater>

在第一页上,代码隐藏可以访问litHappyLiteral,但另一方面litSadLiteral不可以。

有什么想法吗? 使用asp.net 3.5。

以下是我可以分享的代码隐藏内容:

protected void RepeaterThatMakesMeSad_OnItemDataBound(object sender, RepeaterItemEventArgs e) {
// Logging junk
// Guard clauses
try {
  XmlNode myItem = (e.Item.DataItem as XmlNode);

  if(myItem != null) {
   litSadLiteral.Text = "SADNESS.";
  } // End if
 } // end try
} // method

在这些条件下,当前上下文中不存在“litSadLiteral”。

我弄清楚我做错了什么(见下面的答案),但如果有人仍然愿意解释为什么一旦文字放在可转换的上下文中,只要它放在Repeater的ItemTemplate的范围内,我我很感激。

1 个答案:

答案 0 :(得分:0)

我意识到发生了什么。

在我的工作中&#39;例如,我没有直接达到我的文字。我去搜索了#39;第一

在工作中,我没有:

litHappyLiteral.Text = "Happy!";

我实际上有:

Literal litHappyLiteral = (e.Item.FindControl("litHappyLiteral") as Literal);
if(litHappyLiteral != null) {
  litHappyLiteral.Text = "Happy!";
}

现在,我在另一页上这样做,一切正常。 抱歉占用了所有人的时间。

我当然不知道这个过程,我是否应该删除这个问题或将其留下来,以防这个错误/解决方案可能在将来帮助某人?