It's worth understanding what the different markup tags mean within ASP.NET template markup processing:
<% 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 to emit the value of a ternary expression (err conditional operator) you can either use:
<%= (condition) ? if-true : if-false %>
or you can writeL
<% Response.Write( (condition) ? if-true : if-false ) %>
If you were using databound control (like a repeater, for example), you could use the databinding format to evaluate and emit the result:
<asp:Repeater runat='server' otherattributes='...'>
<ItemTemplate>
<div class='<%# Container.DataItem( condition ? if-true : if-false ) %>'> content </div>
</ItemTemplate>
</asp:Repeater>
An interesting aspect of the <%# %> markup extension is that it can be used inside of attributes of a tag, whereas the other two forms (<% and <%=) can only be used in tag content (with a few special case exceptions). The example above demonstrates this.