C# 空文本问题
我有一个中继器,它应该只在绑定字段存在时才显示它。读完后,我决定在我的转发器中使用一个文本,并使用OnItemDatabound触发器填充我的文本,但我的文本似乎无法从c#代码中访问,我不明白为什么 这是aspx页面C# 空文本问题,c#,asp.net,casting,literals,C#,Asp.net,Casting,Literals,我有一个中继器,它应该只在绑定字段存在时才显示它。读完后,我决定在我的转发器中使用一个文本,并使用OnItemDatabound触发器填充我的文本,但我的文本似乎无法从c#代码中访问,我不明白为什么 这是aspx页面 <asp:Repeater runat="server" ID="rpt_villaresults" OnItemDataBound="checkForChildren"> <HeaderTemplate> </HeaderT
<asp:Repeater runat="server" ID="rpt_villaresults" OnItemDataBound="checkForChildren">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
//.................MORE CODE HERE......................
<div class="sleeps"><h4>To Sleep</h4><h5><%#Eval("sleeps")%> <asp:Literal ID="sleepsChildrenLit" runat="server" /> </h5></div>
//.............MORE CODE HERE........................
您可能知道,当您说:
As Literal
时,它可以返回null
值。如果您执行了正确的强制转换,您将在运行时得到一个异常,该异常将为您提供更多关于什么是错误的和/或是哪个元素导致了问题的信息
如果您总是希望“chilLit”有一个值,并且没有检查null,那么您应该使用
Literal childLit = (Literal)e.Item.FindControl("sleepsChildrenLit");
您可能知道,当您说:
As Literal
时,它可以返回null
值。如果您执行了正确的强制转换,您将在运行时得到一个异常,该异常将为您提供更多关于什么是错误的和/或是哪个元素导致了问题的信息
如果您总是希望“chilLit”有一个值,并且没有检查null,那么您应该使用
Literal childLit = (Literal)e.Item.FindControl("sleepsChildrenLit");
嗯,对于您当前的代码,我们不知道这是因为e.Item.FindControl返回null,还是因为它不是文本。这就是为什么如果您确定类型确实应该是,那么应该使用cast而不是“as” 将代码更改为:
Literal childLit = (Literal) e.Item.FindControl("sleepsChildrenLit");
看看会发生什么。如果您得到一个强制转换异常,您将知道这是因为它是错误的类型。如果仍然获得NRE,则FindControl将返回null
编辑:现在,除此之外,让我们看看后面的代码:
String str = e.Item.DataItem.ToString();
if (e.Item.DataItem != null)
{
...
}
如果e.item.DataItem
为null,则对ToString()的调用将引发异常-因此下一行的检查是无意义的。我怀疑你真的想要:
嗯,对于您当前的代码,我们不知道这是因为e.Item.FindControl返回null,还是因为它不是文本。这就是为什么如果您确定类型确实应该是,那么应该使用cast而不是“as” 将代码更改为:
Literal childLit = (Literal) e.Item.FindControl("sleepsChildrenLit");
看看会发生什么。如果您得到一个强制转换异常,您将知道这是因为它是错误的类型。如果仍然获得NRE,则FindControl将返回null
编辑:现在,除此之外,让我们看看后面的代码:
String str = e.Item.DataItem.ToString();
if (e.Item.DataItem != null)
{
...
}
如果e.item.DataItem
为null,则对ToString()的调用将引发异常-因此下一行的检查是无意义的。我怀疑你真的想要:
还将为中继器的HeaderItem调用OnItemDataBound事件处理程序checkForChildren()。 但在这种情况下,e.Item.DataItem将为null。当然FindControl()也将返回null,因为HeaderTemplate中没有ID为“sleepsChildrenLit”的文本控件 您可以使用e.Item.ItemType属性检查当前项是FooterItem的HeaderItem还是“普通”项,例如:
if (e.Item.ItemType == ListItemType.Header)
{
...
}
else if (...)
{
...
}
还将为中继器的HeaderItem调用OnItemDataBound事件处理程序checkForChildren()。 但在这种情况下,e.Item.DataItem将为null。当然FindControl()也将返回null,因为HeaderTemplate中没有ID为“sleepsChildrenLit”的文本控件 您可以使用e.Item.ItemType属性检查当前项是FooterItem的HeaderItem还是“普通”项,例如:
if (e.Item.ItemType == ListItemType.Header)
{
...
}
else if (...)
{
...
}
谢谢你,乔恩。我使用了演员阵容,童子军仍然是空的。同样奇怪的是,IntelisSense没有在代码背后找到文字。我应该可以引用sleepsChildrenLit.Text。。。。但我不能,即使它在服务器上运行。我以为你可以把文字放在任何地方?谢谢Jon。我使用了演员阵容,童子军仍然是空的。同样奇怪的是,IntelisSense没有在代码背后找到文字。我应该可以引用sleepsChildrenLit.Text。。。。但我不能,即使它在服务器上运行。我以为你可以把文字放在任何地方?