asp-items
Razor «TagHelper» добавит <option>
к <select>
для каждого значения в SelectList
. Я хочу изменить каждого из этих детей.
В частности, я хочу отключить некоторые из них (например, добавить disabled="disabled"
).
Более конкретно, я хочу динамически отключать некоторые из них; Я использую angular, чтобы я мог ng-disabled="{dynamic_boolean_which_determines_disabled}"
. Это означает, что параметр может быть отключен сначала, но после того, как пользователь внесет изменения, параметр может быть отключен (без перезагрузки страницы). Angular должен позаботиться об этом; Я думаю, что Angular и TagHelpers теоретически должны работать вместе...
Я ожидал:
Я мог бы каким-то образом получить доступ к IEnumerable дочерних тегов <option>
, которые будут созданы (т.е. по одному для каждого элемента в SelectList
), перебирать дочерние теги и SetAttribute("disabled") или SetAttribute("ng-disabled")...
Я пытался:
- Создание моего собственного TagHelper, который нацелен на
select[asp-items]
и пытается получить GetChildContentAsync() и/или SetContent для достижения тегов IEnumerable<option>
и перебирать их и обрабатывать каждый, но я думаю, что это позволит мне только изменить весь InnerHtml как строку; кажется хакерским делать String.replace, но я мог бы сделать это, если это мой единственный вариант? то естьChildrenContent.Replace("<option", "<option disabled=\"...\"")
- Создание моего собственного TagHelper, который нацелен на элементы
option
, которые являются дочерними элементамиselect[asp-items]
, чтобы я мог отдельно обрабатывать каждый. Это работает, но не для динамически добавленных<option>
, созданныхasp-items
, оно работает только для «буквальных» тегов<option>
, которые я на самом деле поместил в свою разметку cshtml.
Думаю, это сработает, но не идеально:
- Как я сказал выше, я думаю, что могу получить результат динамических asp-элементов TagHelper
<option></option> <option></option>
в виде строки и выполнить замену строки, но я предпочитаю не работать со строками напрямую... - Я подозреваю (я не пробовал), что мог бы просто сделать работу
asp-items
сам; то естьcustom-items
. Но затем я воссоздаю колесо, заново выполняя работу, которуюasp-items
мог бы сделать за меня?