2009-03-17 21 views

risposta

26

utilizzare un'istruzione in linea come John_ stati, o , creare una funzione nel codice dietro che esegue la logica richiesta.

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

quindi utilizzare questo come segue

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

EDIT: Ho appena letto un commento su un altro post che gli stati si desidera mostrare diversi HTML seconda su questo risultato. In tal caso, puoi provare a utilizzare il flag Visible di un segnaposto contenente il tuo codice. Ad esempio:

<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

L'EDIT è un suggerimento davvero utile. Grazie. –

-1

Non riesco a trovare qualcosa di sbagliato nelle tue frasi ma comparativo che hai fatto tra Config.MAX_ENQUIRY_SALES e Convert.ToInt32 (Eval ("NbrOrders")). Questi operatori sono dello stesso tipo? Puoi mostrare il tipo di ognuno nella tua pagina web?

5

Non sono sicuro che è possibile aggiungere le staffe per il condizionale, l'unico modo vincolante che so di farlo è con una dichiarazione in linea in questo modo:

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

Sì, ho sospettato questo ... il mio problema è che ho bisogno di generato un sacco di html in ogni caso ... L'intero punto di ordinamento ASP è perso ... –

+0

@Neils Bosma, Questa sarebbe stata la mia risposta, pure. Non sarebbe possibile combinare HTML con associazioni Eval, ma l'HTML può ancora essere generato nella tua funzione e quindi inserito nella colonna dati che stai vincolando, quindi chiamato con Eval ("YourColumn"). – vapcguy

-1

se/else i blocchi funzionano in ASP .NET come ci si aspetta. Il seguente funziona bene.

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

Forse la logica condizionale nel tuo esempio sta generando un'eccezione?

+0

Penso che sia l'Eval che causa il problema. Non puoi mescolare la logica condizionale all'interno del databinding. –

+1

questo non mostra un'espressione di associazione dati. –

4

Il problema con la risposta di @Robin Day è che il seguente codice ha esito negativo se si dispone di figli del database che possono o non possono avere dati dati lo stato corrente di ciò che si sta visualizzando. A volte è difficile manovrare intorno al codice del databound annullabile se si dispone di un grafico di oggetti complessi.

Ad esempio, si consideri:

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

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

Se VisibleCondition() rendimenti false, bambino controlla ancora vengono chiamati con DataBind() che può risultare in un NullReferenceException nell'esempio di cui sopra.


Ecco un approccio migliore, secondo me:

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

e utilizzata nel modo seguente:

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