#c# #asp.net-mvc #asp.net-core
#c# #asp.net-mvc #asp.net-core
Вопрос:
У меня есть ASP.Net Основной вид, и в нем я пытаюсь уменьшить отображаемый текст, я мог бы использовать:
@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. Я знаю, что это может быть лучшим вариантом, но это не то, о чем я спрашиваю!
Комментарии:
1. Я бы ожидал, что это сработает, если вы просто удалите
;
— то, что у вас есть, не является допустимым утверждением , но это допустимое выражение . Как всегда, было бы действительно полезно, если бы вы включили точное сообщение об ошибке, которое вы получаете, вместо того, чтобы заставлять нас гадать.2. Привет @JonSkeet он не компилируется, если я исключаю
;
он сообщает мне, что это ожидаемо. Когда я добавляю;
, это дает мнеOnly assignment, call ... expressions can be used as a statement.
3. Ах, возможно, причиной проблемы является использование
{}
. Как насчет@(item.Details.Length < 100 ? item.Details : item.Details.Substring(0, 99))
?4. Я только что попробовал, что я действительно могу объявить строку
x
в строке, а затем поместить ее между<element>
тегами — я не знал, что это возможно до сих пор5. Ах, вот оно что! Использование
()
вместо{}
— сработало как по волшебству. Я знал, что делал это раньше!()
Вычисляют выражение, тогда как {} — это скорее блок кода?
Ответ №1:
В настоящее время вы пытаетесь использовать условное ?: выражение как оператор — но это не выражение оператора. Однако это является допустимым выражением само по себе. Итак, вам нужно:
- Удалить
;
, который действителен только после инструкции - Измените
{}
(используется для тела блока) на()
(используется для указания Razor, какой объем текста составляет выражение)
<span>@(item.Details.Length < 100 ? item.Details : item.Details.Substring(0, 99))</span>
Обратите внимание, что в C # 8 вы можете использовать оператор range для большей краткости:
<span>@(item.Details.Length < 100 ? item.Details : item.Details[..99])</span>