簡體   English   中英

ASP.Net 條件數據綁定

[英]ASP.Net conditional databinding

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

<% } else { %>
...                                        

<% } %>

給我一個 InvalidOperationException? 如何在 ASP 中編寫條件 html 生成?

按照 John_ 的狀態使用內聯語句,或者在執行所需邏輯的代碼中創建 function。

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>

我不確定你可以為條件綁定添加括號,我知道這樣做的唯一方法是使用這樣的內聯語句:

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

@Robin Day 的答案的問題是,如果您有數據綁定的子節點,在給定當前 state 的情況下,這些子節點可能有數據,也可能沒有數據,則以下代碼將失敗。 如果您有一個復雜的 object 圖,有時很難繞過可空數據綁定代碼。

例如,考慮:

    <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>

我在您的句子中找不到錯誤,但是您在 Config.MAX_ENQUIRY_SALES 和 Convert.ToInt32(Eval("NbrOrders")) 之間進行了比較。 這些運算符是否屬於同一類型? 你能在你的 web 頁面中顯示每個的類型嗎?

if/else 塊在 ASP .NET 中工作,正如您所期望的那樣。 以下工作正常。

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

也許您示例中的條件邏輯正在引發異常?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM