ASP.Net条件数据绑定

Nie*_*sma 9 c# asp.net

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

<% } else { %>
...                                        

<% } %>
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*Day 28

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

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

然后使用如下

<%# MyFunction(Convert.ToInt32(Eval("NbrOrders"))) %>
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚阅读了另一篇文章的评论,该帖子声明您希望根据此结果显示不同的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>
Run Code Online (Sandbox Code Playgroud)

  • 编辑是一个非常有用的提示.谢谢. (3认同)

Joh*_*hn_ 5

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

<%# Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) ? Eval("IfTrueValue") : Eval("IfFalseValue") %>
Run Code Online (Sandbox Code Playgroud)


Bri*_*vez 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>
Run Code Online (Sandbox Code Playgroud)

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


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

public class ConditionalPlaceHolder : PlaceHolder
{
    protected override void DataBindChildren()
    {
        if( this.Visible )
        {
            base.DataBindChildren();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并按以下方式使用:

<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>
Run Code Online (Sandbox Code Playgroud)