Дано: 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.
Задача: добавить условие выбора (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.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.
Комментариев нет:
Отправить комментарий