Объедините 'встроенный IF' (C #) с response.write - PullRequest
9 голосов
/ 30 ноября 2009

в обычном кодовом блоке C #:

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

но как насчет использования внутри .aspx, где я хочу ответить. Написать условно:

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

Mny THX

Ответы [ 3 ]

19 голосов
/ 30 ноября 2009

Стоит понять, что означают различные теги разметки при обработке разметки шаблонов ASP.NET:

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

Таким образом, чтобы выдать значение троичного выражения (условный оператор err), вы можете использовать:

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

или вы можете написать L

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

Если вы используете элемент управления с привязкой к данным (например, ретранслятор), вы можете использовать формат привязки к данным для оценки и выдачи результата:

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

Интересный аспект расширения разметки <% #%> заключается в том, что его можно использовать внутри атрибутов тега, тогда как две другие формы (<% и <% =) можно использовать только в содержимом тега (с несколько особых случаев исключения). Пример выше демонстрирует это. </p>

9 голосов
/ 30 ноября 2009
<%=
    (Discount > 0)
        ? "$" + Html.Encode(discountDto.Discount.FlatOff.ToString("#,###."))
        : ""
%>
3 голосов
/ 30 ноября 2009

Положите Response.Write вокруг всего?: - операция:

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