IIf语句中的IsDBNull



我有以下代码:

<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

I have try:

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"), "")%>

您的问题是您正在使用IIF。IIF是一个接受三个参数并返回一个的FUNCTION——它对于避免null引用是没有用的。相反,您应该使用VB2008引入的IF运算符。IF操作符是一个实际操作符,除非需要,否则它不会计算"false"分支。

您应该使用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的Iif是一个函数,运行时应该在传递它们之前评估所有参数,如果你不调用ToString(),你会在第二个Iif上得到InvalidCastException

UPATE 2:

OK。我只写了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>

最新更新