Razor at-символ (@) внутри html-тега Option (Select) (ASP.Net Core 2)

Дано: ASP.Net Core 2, cshtml страница (с Razor синтаксисом).
Задача: добавить условие выбора (selected) в выпадающем списке (SELECT) в тег OPTION (в цикле foreach).
Проблема: ошибки при вставке razor-кода непосредственно в тег (т.е. вместо атрибута тега, а не его значения).

Следующий простой код приводит к ошибке компилятора Visual Studio:

<option value="@at.IntID" @((at.IntID == 1) ? "selected" : "")>@at.strName</option>


С ошибкой: "Missing attribute name"

Если переместить код в начало тега, то получаем ошибку:

<option @((at.IntID == 1) ? "selected" : "") value="@at.IntID">@at.strName</option>


The tag helper 'option' must not have C# in the element's attribute declaration area

Т.е. при попытке вставить razor-код с условием вывода части атрибутов самого тега компилятор ругается потому, что Visual Studio пытается применить хелпер для данного тега (HTMLHelper).

Как обойти данную проверку

Вариант 1: использовать восклицательный знак - "!" - в теге option, например:

<!option value="@at.IntID" @((at.IntID == 1) ? "selected" : "")>@at.strName</!option>


Иногда при таком варианте может возникать предупреждение компилятора (особенно при использовании конструкции foreach):

Closing tag supplied for self-closing element. Remove closing tag.



Тогда применяем вариант 2.

Вариант 2: использовать razor-символ @ в строке тега (без восклицательного знака):

@: <option @((at.IntID == 1) ? "selected" : "") value="@at.IntID">@at.strName</option>



(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет:

Отправить комментарий