2009-03-17 14 views

答えて

26

はJohn_状態としてインライン文を使用しますか、必要なロジックを実行するコードビハインド内に関数を作成します。

<%# MyFunction(Convert.ToInt32(Eval("NbrOrders"))) %> 

EDITを次のように

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

そして、これを使用する:私はちょうどあなたがこの結果に応じて異なる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> 
+3

EDITは本当に役に立つヒントです。ありがとう。 –

-1

あなたの文章に間違いがありますが、あなたがConfig.MAX_ENQUIRY_SALESとConvert.ToInt32(Eval( "NbrOrders"))の間で比較したことはありません。これらの演算子は同じ型ですか?あなたのウェブページにそれぞれのタイプを表示できますか?

5

私はそれをやっての知っている唯一の方法は、そのようなインライン文であり、あなたが条件付きの結合のためのブラケットを追加することができますかわからない:

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

はい、私はこれは...私の問題は、私がする必要があるということである疑いがありますそれぞれのケースでhtmlの束を生成しました... ASPのソートの全体のポイントは失われています... –

+0

@ Neils Bosma、これも私の答えだったでしょう。 HTMLとEvalバインディングを混在させることはできませんが、関数内でHTMLを生成してからバインドするデータ列に入れ、Eval( "YourColumn")で呼び出すことができます。 – vapcguy

-1

if/elseブロックは、期待どおりにASP .NETで動作します。以下はうまく動作します。

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

おそらく、例の条件付きロジックが例外をスローしていますか?

+0

私はそれが問題を引き起こすEvalだと思う。データバインディング内で条件付きロジックを混在させることはできません。 –

+1

これはデータバインディング式を表示していません。 –

4

@Robin Dayの答えの問題は、レンダリングしているものの現在の状態が与えられているデータがある場合とない場合があるデータバインドされた子がある場合、次のコードが失敗することです。複雑なオブジェクトグラフがある場合は、null可能なデータバインドされたコードの周りを動かすのが難しい場合があります。例えば

、考えてみます。

<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は、子コントロールは、まだ上記の例でNullReferenceExceptionにもたらすことができるDataBind()で呼び出されます。

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>