将'in-line IF'(C#)与response.write结合使用

时间:2009-11-30 15:57:51

标签: c# asp.net-mvc conditional-operator

在传统的C#代码块中:

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

但是如果要在.aspx中使用,我想有条件地响应。有条不紊地写:

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

mny thx

3 个答案:

答案 0 :(得分:19)

值得了解不同的标记标记在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

因此,要发出三元表达式的值(错误条件运算符),您可以使用:

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

&lt;%#%&gt;的一个有趣方面标记扩展是指它可以在标记的属性中使用,而其他两种形式(&lt;%和&lt;%=)只能用于标记内容(具有一些特殊情况例外)。上面的例子证明了这一点。

答案 1 :(得分:9)

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

答案 2 :(得分:3)

将Response.Write放在整个?: - 操作:

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