我有一个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的范围内,我我很感激。
答案 0 :(得分:0)
我意识到发生了什么。
在我的工作中&#39;例如,我没有直接达到我的文字。我去搜索了#39;第一
在工作中,我没有:
litHappyLiteral.Text = "Happy!";
我实际上有:
Literal litHappyLiteral = (e.Item.FindControl("litHappyLiteral") as Literal);
if(litHappyLiteral != null) {
litHappyLiteral.Text = "Happy!";
}
现在,我在另一页上这样做,一切正常。 抱歉占用了所有人的时间。
我当然不知道这个过程,我是否应该删除这个问题或将其留下来,以防这个错误/解决方案可能在将来帮助某人?