2009-11-30 3 views
9

in einem herkömmlichen C# Codeblock:Kombinieren Sie eine 'in-line IF' (C#) mit response.write

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

aber was ist die Verwendung innerhalb einer ASPX, wo ich bedingt Response.write wollen:

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

mny thx

+3

Für zukünftige Referenz wird es häufig als "der ternäre if-Operator" bezeichnet. –

+2

@Greg: Es wird tatsächlich als der bedingte Operator bezeichnet. http://msdn.microsoft.com/en-us/library/ty67wk28.aspx – LukeH

+0

@Luke In Fairness gegenüber Greg habe ich gesehen, dass es öfter als der Ternary-Operator referenziert als der Conditional. Bei if-Anweisungen wird normalerweise auf Conditional verwiesen. – James

Antwort

19

Es lohnt sich zu verstehen, was die verschiedenen Markup-Tags innerhalb von ASP.NET Template Markup-Verarbeitung bedeuten:

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

So den Wert eines ternären Ausdruck zu emittieren (err Konditionaloperator) Sie können entweder:

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

oder Sie können writeL

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

Wenn Sie Databound-Kontrolle sind mit (wie ein Repeater, zum Beispiel), können Sie das Databinding-Format verwenden, um zu bewerten und das Ergebnis zu emittieren:

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

Ein interessanter Aspekt der <% #%> Markup-Erweiterung ist, dass Sie kann innerhalb von Attributen eines Tags verwendet werden, während die anderen beiden Formen (<% und <% =) nur im Tag-Inhalt verwendet werden können (mit einigen speziellen Ausnahmefällen). Das obige Beispiel zeigt dies.

+0

sehr schätzen den zusätzlichen Aufwand zum Auflisten von verschiedenen Markup-Tags - könnten Sie erweitern, um ein Beispiel für die "#"? – justSteve

+0

Soweit mir bekannt ist, können Sie jede der drei '<% %>' Varianten verwenden, die Sie in einem Tag Attribut erwähnt haben. Warum sollte es nur auf einen von ihnen beschränkt sein? Es sei denn, Sie beziehen sich nur auf Tags mit dem Attribut 'runat = "server"' ... –

+0

Ich hätte klarer sein sollen. 'runat =" server "' -Tags unterstützen die <%, <% = Markup-Erweiterungen nicht. Es gibt jedoch auch hier eine Ausnahme - zum Beispiel erweitern Meta-Tags diese innerhalb . – LBushkin

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

Put Response.Write um das ganze: - Betrieb:

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