2009-11-30 7 views
9

en un bloque convencional de código C#:Combine un 'in-line SI' (C#) con response.write

"myInt = (<condition> ? <true value> : <false value>)" 

pero ¿qué pasa con el uso dentro de un .aspx donde quiero response.write condicionalmente:

<% (Discount > 0 ? Response.Write("$" + Html.Encode(discountDto.Discount.FlatOff.ToString("#,###."): "")%> 

MNY THX

+3

Para referencia futura, con frecuencia se lo conoce como "el operador ternario si". –

+2

@Greg: en realidad se conoce como el operador condicional. http://msdn.microsoft.com/en-us/library/ty67wk28.aspx – LukeH

+0

@Luke Para ser justos con Greg, lo he visto mencionar más veces como operador ternario que como condicional. Condicional usualmente se hace referencia cuando se habla de declaraciones if. – James

Respuesta

19

Vale la pena entender lo que significan las diferentes etiquetas de marcado dentro de ASP.NET procesamiento formato de plantilla:

<% expression %> - evaluates an expression in the underlying page language 
<%= expression %> - short-hand for Response.Write() - expression is converted to a string and emitted 
<%# expression %> - a databinding expression that allows markup to access the current value of a bound control 

Así que para emitir el valor de una expresión ternaria (errar operador condicional) También se puede usar:

<%= (condition) ? if-true : if-false %> 

o puede writeL

<% Response.Write((condition) ? if-true : if-false) %> 

Si se usa el control de enlace de datos (como un repetidor, por ejemplo), puede utilizar el formato de enlace de datos para evaluar y emitir el resultado:

<asp:Repeater runat='server' otherattributes='...'> 
    <ItemTemplate> 
      <div class='<%# Container.DataItem(condition ? if-true : if-false) %>'> content </div> 
    </ItemTemplate> 
</asp:Repeater> 

Un aspecto interesante de la #%> extensión de marcado <% es que se puede usar dentro de los atributos de una etiqueta, mientras que las otras dos formas (<% y <% =) solo se pueden usar en el contenido de la etiqueta (con algunas excepciones de casos especiales). El ejemplo anterior demuestra esto.

+0

apreciamos mucho el esfuerzo extra para listar diferentes etiquetas de marcado: ¿podría ampliar para incluir un ejemplo del "#"? – justSteve

+0

Que yo sepa, puede usar cualquiera de las tres variaciones '<% %>' que mencionó dentro de un atributo de etiqueta. ¿Por qué estaría restringido a solo uno de ellos? A menos que se refiriera solo a las etiquetas con el atributo 'runat =" server "' ... –

+0

Debería haber sido más claro. Las etiquetas 'runat =" server "' no admiten las expansiones de marcado <%, <% =. Sin embargo, hay una excepción incluso a esto: por ejemplo, las metaetiquetas se expanden dentro de . – LBushkin

9
<%= 
    (Discount > 0) 
     ? "$" + Html.Encode(discountDto.Discount.FlatOff.ToString("#,###.")) 
     : "" 
%> 
3

Put Response.Write todo el conjunto: - operación:

<% Response.Write(Discount > 0 ? "$" + Html.Encode(discountDto.Discount.FlatOff.ToString("#,###.") : "") %>