【问题标题】:Using html with ?: operator将 html 与 ?: 运算符一起使用
【发布时间】:2014-09-26 18:25:14
【问题描述】:

我正在尝试根据服务器数据显示/隐藏图像链接,但似乎无法在 ?: 运算符中正确获取 html。我不是传统的 .net 开发人员,所以这个让我难过。

<td>
    <p>
        <%# (Eval("attachment").ToString() == "No file attached") 
            ? "&nbsp;" 
            :  <a href='files/<%# Eval("attachment")%>'>
                <img src='images/geticon.png' alt='Attachment image' />
               </a> %>
    </p>
</td>

【问题讨论】:

  • 运算符称为条件运算符(有时也称为三元运算符)。有了这些关键字,快速搜索应该可以找到答案。你看,我自己对 ASP 经典不熟悉。
  • 经典-asp / C# ?从什么时候开始
  • 我在代码中添加了换行符。希望它仍然有效并且比一条长线更有意义。
  • 您遇到问题的具体原因是什么?
  • 您是否在错误表达式中缺少引号? (或者在 ASP 解析器中不需要吗?)

标签: c# asp-classic operator-keyword concat


【解决方案1】:

这基本上是执行if/else 语句的简写方式。它的工作原理是这样的:

string does3equal3 = 3 == 3 ? "3 does equal 3" : "3 does not equal 3. Huh?"

此表达式从? 的左侧开始,需要一个布尔表达式。 3 == 3 简化为 true。由于左侧的表达式计算结果为true,因此返回?: 之间的表达式。如果表达式的计算结果为 false,则返回 : 之后的表达式。

编辑

要解决您的问题,请尝试以下方法:

<%# (Eval("attachment").ToString() == "No file attached") 
? "&nbsp;" : "<a href='files/" + Eval("attachment") + "'><img src='images/geticon.png' alt='Attachment image' /></a>" %>

您的问题是 2 倍。首先,您没有将 false 表达式用引号括起来。其次,您试图嵌套两个数据绑定表达式(例如&lt;%# %&gt;)。你不能这样做,也不需要这样做,因为你已经“逃脱”了。

【讨论】:

  • 我知道它是如何工作的。我的问题是显示 html 以及如何使用 asp c# inline 处理它。
  • 谢谢!我认为这与第二个数据绑定有关。在我的代码中,连接在某一点上是正确的,但不是数据绑定。经验教训。
【解决方案2】:

:?ternary operator,它基本上用作一个简短的 if 子句。

condition? a : b
//is equivalent of 

if (condition)
    a
else 
    b

【讨论】:

  • 这行得通:

【解决方案3】:

请通过一个非常基本的示例检查是否完全支持三元运算符。

&lt;%# true ? "true" : "false" %&gt; 或类似的东西。

当然还有假的。

然后开始扩展条件的复杂性,然后是要显示的最终标记。

【讨论】:

  • 我首先测试了它,它确实有效。如果我删除“:”之后的 html 并将其替换为字符串,则它可以工作。
  • 您是否尝试将 HTML 放在 : 之后的引号中?
  • @bowlturner 我有。我也尝试连接整个 html,但没有成功。
猜你喜欢
  • 2020-04-22
  • 2017-11-17
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 2012-11-22
  • 1970-01-01
相关资源
最近更新 更多