Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空文本问题_C#_Asp.net_Casting_Literals - Fatal编程技术网

C# 空文本问题

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

我有一个中继器,它应该只在绑定字段存在时才显示它。读完后,我决定在我的转发器中使用一个文本,并使用OnItemDatabound触发器填充我的文本,但我的文本似乎无法从c#代码中访问,我不明白为什么

这是aspx页面

    <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。。。。但我不能,即使它在服务器上运行。我以为你可以把文字放在任何地方?