首页 > 解决方案 > 是否可以在不分配结果的情况下使用条件运算符?

问题描述

我有一个 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);
}

即语法需要分解为htmlcs部分,但是我可以使用任何语法来使用条件运算符在单行中分配和显示变量吗?

请不要告诉我所有的显示逻辑都应该在 ViewModel 中完成。我知道这可能是最好的选择,但这不是我要问的!

标签: c#asp.net-mvcasp.net-core

解决方案


目前,您正在尝试使用条件 ?: 表达式作为语句 - 但它不是语句表达式。但是,它本身就是一个有效的表达式。所以你需要:

  • 删除;仅在语句后有效
  • {}将(用于块体)更改为()(用于告诉 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>

推荐阅读