【发布时间】:2017-05-26 18:56:04
【问题描述】:
asp-items Razor“TagHelper”将为SelectList 中的每个值添加一个<option> 到<select>。我想修改每个孩子。
具体来说,我想禁用其中的一些(即添加disabled="disabled")。
更具体地说,我想动态禁用其中一些;我正在使用角度,所以我可以ng-disabled="{dynamic_boolean_which_determines_disabled}"。这意味着可以先禁用该选项,但在用户进行更改后,可以禁用该选项(无需重新加载页面)。 Angular 应该解决这个问题;我认为 Angular 和 TagHelpers 理论上应该一起工作......
我预计:
我可以以某种方式访问将创建的子 <option> 标签的 IEnumerable(即,SelectList 中的每个项目一个),迭代子标签,然后 SetAttribute("disabled") 或 SetAttribute("ng -禁用")...
我试过了:
- 创建我自己的以
select[asp-items]为目标的 TagHelper,并尝试 GetChildContentAsync() 和/或 SetContent 以达到 IEnumerable<option>标记并迭代它们并处理每个标记,但我认为这只会让我修改整个InnerHtml 作为字符串;做一个 String.replace 感觉很糟糕,但如果这是我唯一的选择,我可以 这样做吗?即ChildrenContent.Replace("<option", "<option disabled=\"...\"") - 创建我自己的 TagHelper,它以
option元素为目标,这些元素是select[asp-items]的子元素,因此我可以单独处理每个元素。这有效,但不适用于由asp-items创建的动态添加的<option>,它仅适用于我实际放入cshtml 标记中的“文字”<option>标签。
我认为这可行,但并不理想:
- 如上所述,我想我可以得到 TagHelper 的动态 asp-items
<option></option> <option></option>的结果作为字符串,并进行字符串替换,但我不喜欢直接使用字符串... - 我怀疑(我还没有尝试过)我可以自己做
asp-items的工作;即custom-items。但后来我通过重新做asp-items可以为我完成的工作来重新创建轮子?
【问题讨论】:
-
只想提@Daniel J.G.,因为他们似乎知道很多。但我猜“@”那个用户may not work the way I expect :)