2009-03-17 23 views

Respuesta

26

utiliza una instrucción en línea como estados o John_ , crea una función detrás de tu código que realice la lógica requerida.

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

A continuación, utilice esto como sigue

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

EDIT: Acabo de leer un comentario en otro post que indica que desea mostrar diferentes HTML en función de este resultado. En ese caso, puede intentar usar el indicador Visible de un marcador de posición que contiene su código. Tales como:

<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

El EDIT es un consejo realmente útil. Gracias. –

-1

No puedo encontrar algo mal en sus oraciones pero comparativo que hizo entre Config.MAX_ENQUIRY_SALES y Convert.ToInt32 (Eval ("NbrOrders")). ¿Estos operadores son del mismo tipo? ¿Puedes mostrar el tipo de cada uno en tu página web?

5

No estoy seguro de que usted puede agregar soportes para el la única manera condicional de unión, sé de hacerlo es con una declaración en línea, así:

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

Sí, yo sospechaba esto ... mi problema es que necesito generó un montón de html en cada caso ... Todo el punto de ASP se pierde ... –

+0

@Neils Bosma, esta también ha sido mi respuesta. No podría mezclar HTML con enlaces de evaluación, pero aún se puede generar HTML en su función y luego ponerlo en la columna de datos que está vinculando, y luego llamarlo con Eval ("YourColumn"). – vapcguy

-1

bloqueos if/else funcionan en ASP .NET como usted espera. Lo siguiente funciona bien.

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

Quizás la lógica condicional en su ejemplo arroje una excepción?

+0

Creo que es la evaluación que causa el problema. No puede mezclar la lógica condicional dentro del enlace de datos. –

+1

esto no muestra una expresión de enlace de datos. –

4

El problema con la respuesta de @Robin Day es que el siguiente código falla si tiene hijos con conexión de datos que pueden o no tener datos dado el estado actual de lo que esté representando. A veces es difícil maniobrar en torno al código de enlace de datos anulables si tiene un gráfico de objeto complejo.

Por ejemplo, considere:

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

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

Si VisibleCondition() vuelve false, niño aún controla ser llamado con DataBind() lo cual puede resultar en una NullReferenceException en el ejemplo anterior.


Aquí es un mejor enfoque, en mi humilde opinión:

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

y utiliza de la siguiente manera:

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