c# - 是否可以在不分配结果的情况下使用条件运算符?
问题描述
我有一个 ASP.Net Core 视图,在其中我试图缩小显示的文本,我可以使用:
@if (item.Details.Length < 100)
{
<span>@item.Details</span>
}
else
{
<span>@item.Details.Substring(0, 99) ...</span>
}
但后来我想我可以使用条件运算符:
<span>@{item.Details.Length < 100 ? item.Details : item.Details.Substring(0, 99);}</span>
我猜这不起作用的原因与它不起作用的原因相同:
@if (item.Details.Length < 100)
{
item.Details;
}
else
{
item.Details.Substring(0, 99);
}
即语法需要分解为html
和cs
部分,但是我可以使用任何语法来使用条件运算符在单行中分配和显示变量吗?
请不要告诉我所有的显示逻辑都应该在 ViewModel 中完成。我知道这可能是最好的选择,但这不是我要问的!
解决方案
目前,您正在尝试使用条件 ?: 表达式作为语句 - 但它不是语句表达式。但是,它本身就是一个有效的表达式。所以你需要:
- 删除
;
仅在语句后有效 {}
将(用于块体)更改为()
(用于告诉 Razor 有多少文本是表达式)
<span>@(item.Details.Length < 100 ? item.Details : item.Details.Substring(0, 99))</span>
请注意,在 C# 8 中,您可以使用范围运算符来更简洁:
<span>@(item.Details.Length < 100 ? item.Details : item.Details[..99])</span>
推荐阅读
- r - 关于点和多边形的叶绿素的次要图例,ggplot
- sql-server - 对于存储过程,我可以更改 SSMS UI 中“执行”命令的默认行为吗?
- c - C:家庭作业中美元/美分的舍入和输出格式
- c# - 当我将 Web api 发布到 Windows Server 2012 时,C# WebBrowser 单击方法不起作用
- mysql - 排序闭包表分层数据结构
- wordpress - woocommerce 搜索栏自定义字段
- firebase - 验证firebase中的数据库ID
- ruby-on-rails - Ruby 如何使用 ActiveRecord 连接结果?
- lua - lua 脚本,当通过 wrk 执行时,版本不同
- java - 程序类型已经存在:retrofit2.Converter$Factory Retrofit 编译错误