我有以下代码:
<div class="featpropv3_price"><span class="featpropv3_price_o"><%# IIf(DataBinder.Eval(Container.DataItem, "amount") <> 0, DataBinder.Eval(Container.DataItem, "currency"), "")%></span> <span class="featpropv3_price_r"><%# iif(DataBinder.Eval(Container.DataItem, "amount") <> 0,formatnumber(DataBinder.Eval(Container.DataItem, "amount"),0,0,0,-1),"POA") %></span>
我想检查它是否等于IsDBNull
我试过了:
IIf(DataBinder.Eval(Container.DataItem, "amount") <> 0 or DataBinder.Eval(Container.DataItem, "amount" IsDBNull.
我想要做的是,如果它是0或IsDBNull我想要显示POA。
编辑:
我想我需要这样的东西:
<%# IIf(Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")), if( DataBinder.Eval(Container.DataItem, "amount") <> 0, DataBinder.Eval(Container.DataItem, "currency"), "")%>
答案 0 :(得分:1)
您的问题是您正在使用IIF。 IIF是一个函数,它接受三个参数并返回一个 - 它对于避免空的derefernce非常有用。您应该使用VB2008引入的IF运算符。 IF运算符是一个实际的运算符,它不会评估&#34; false&#34;分支,除非有必要。
答案 1 :(得分:0)
您应该使用IsDBNull
功能。并使用AndAlso
确保短路评估
<div class="featpropv3_price">
<span class="featpropv3_price_o">
<%# IIf(Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0, DataBinder.Eval(Container.DataItem, "currency").ToString(), "")%>
</span>
<span class="featpropv3_price_r">
<%# iif(Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0, formatnumber(DataBinder.Eval(Container.DataItem, "amount").ToString(),0,0,0,-1),"POA") %>
</span>
更新:
调用ToString()
是因为(与C#中的:?
不同,VB&#39; Iif
是一个函数,运行时应该在传递它们之前评估所有参数,如果你不&# 39;致电ToString()
,您将在第二个InvalidCastException
上获得Iif
。
更新2:
行。我只用If:
重写了它<div class="featpropv3_price">
<span class="featpropv3_price_o">
<%If Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0 Then%>
<%# DataBinder.Eval(Container.DataItem, "currency")%>
<% Else %>
<%= ""%>
<% End If%>
</span>
<span class="featpropv3_price_r">
<% If Not IsDBNull(DataBinder.Eval(Container.DataItem, "amount")) AndAlso DataBinder.Eval(Container.DataItem, "amount") <> 0%>
<%# formatnumber(DataBinder.Eval(Container.DataItem, "amount").ToString(),0,0,0,-1)%>
<% Else %>
<%= "POA" %>
<%End If%>
</span>