ASP.Net条件数据绑定

时间:2009-03-17 09:16:59

标签: c# asp.net

<% if(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) {  %>
...  

<% } else { %>
...                                        

<% } %>

给我一​​个InvalidOperationException?如何在ASP中编写条件html生成?

5 个答案:

答案 0 :(得分:27)

使用内联语句作为John_状态,或者在代码后面创建一个执行所需逻辑的函数。

protected string MyFunction(int nbrOrders)
{
    if(nbrOrders>=Config.MAX_ENQUIRY_SALES)
    {
        return "TrueResult";
    }
    else
    {
        return "FalseResult";
    }
}

然后按如下方式使用

<%# MyFunction(Convert.ToInt32(Eval("NbrOrders"))) %>
编辑:我刚刚阅读了另一篇文章的评论,该文章表明您希望根据此结果显示不同的HTML。在这种情况下,您可以尝试使用包含代码的占位符的Visible标志。如:

<asp:PlaceHolder id="PlaceHolder1" runat="server" visible='<%# (Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES)%>'>
    <div>My True Html Here</div>
</asp:PlaceHolder>
<asp:PlaceHolder id="PlaceHolder2" runat="server" visible='<%# !(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES)%>'>
    <div>My FalseHtml Here</div>
</asp:PlaceHolder>

答案 1 :(得分:5)

我不确定你是否可以为条件绑定添加括号,我知道这样做的唯一方法是使用内联语句,如下所示:

<%# Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) ? Eval("IfTrueValue") : Eval("IfFalseValue") %>

答案 2 :(得分:5)

@Robin Day回答的问题是,如果您有数据绑定子项,则可能会或可能不会根据您呈现的当前状态提供数据,以下代码将失败。如果你有一个复杂的对象图,有时很难在可空的数据绑定代码周围进行操作。

例如,考虑:

    <asp:PlaceHolder runat="server" Visible="<%# VisibleCondition() %>">

        <%# ((string)null).ToString("c") %> //an object that may have null data
                                            //given the visible condition
    </asp:PlaceHolder>

如果VisibleCondition()返回false,则仍会使用DataBind()调用子控件,这可能会导致上例中的NullReferenceException


这是一个更好的方法,恕我直言:

public class ConditionalPlaceHolder : PlaceHolder
{
    protected override void DataBindChildren()
    {
        if( this.Visible )
        {
            base.DataBindChildren();
        }
    }
}

以下列方式使用:

<web:ConditionalPlaceHolder runat="server" Visible="<%# VisibleCondition1() %>">
    //whatever databound code
    <%# ((string)notNullGivenVisibleCondition1).ToString() %>
    <p>But could be given visible condition 2</p>
</web:ConditionalPlaceHolder>

<web:ConditionalPlaceHolder runat="server" Visible="<%# VisibleCondition2() %>">
    //whatever databound code
    <%# ((string)notNullGivenVisibleCondition2).ToString() %>
    <p>But could be given visible condition 1</p>
</web:ConditionalPlaceHolder>

答案 3 :(得分:-1)

我在句子中找不到错误,但在Config.MAX_ENQUIRY_SALES和Convert.ToInt32(Eval(“NbrOrders”))之间进行了比较。这些运营商是同一类型的吗?你能在网页上显示每个类型吗?

答案 4 :(得分:-1)

if / else阻止在ASP .NET中按预期工作。以下工作正常。

<% if(DateTime.Now.Second % 2 == 0) {  %>
<div>Even</div>
<% } else { %>
<div>Odd</div>
<% } %>

您示例中的条件逻辑可能会抛出异常吗?