我已经设置了以下循环,可以正确地填充选择控件:
<select name="apisel" id="apisel" onchange="SelectedIndexChanged">
@foreach (var item in Model.APIs)
{
<option value="@item.ApiID" @item.SelectedString>
@item.ApiTitle
</option>
}
</select>
我正在尝试使用@item.SelectedString
将字符串“ selected”添加到所选组合框项目的页面中。
但是,这不起作用。因此,作为测试,我只是强制该字符串始终为“ test”,但是,该页面生成了HTML,而没有出现@item.SelectedString
!此外,@item.SelectedString
之前的空格也不存在。
有人知道这是为什么吗?剃刀要在这里做些“聪明”的事情吗?
答案 0 :(得分:2)
新的标签助手正在覆盖您的尝试。
您可以使用<option>
为!
元素手动opt-out
<select name="apisel" id="apisel" onchange="SelectedIndexChanged">
@foreach (var item in Model.APIs)
{
<!option value="@item.ApiID" @item.SelectedString>
@item.ApiTitle
</!option>
}
</select><br/><br/>
答案 1 :(得分:1)
通常,您不能在HTML标签内输出任意字符串。 Razor实际上已经对其标记助手功能进行了HTML解析,因此需要将其格式正确。如果尝试这样做,您将仅收到以下错误:
错误RZ1031:标记帮助程序'option'的元素属性声明区域中不得包含C#。
您可以通过在标签名称前面添加!
来禁用标签助手的解析:
<!option value="@item.ApiID" @item.SelectedString>@item.ApiTitle</!option>
但是,更好的选择是仅使用标签助手来选择该选项:您实际上不需要构造仅包含SelectedString
的{{1}} 。相反,您可以将元素的"selected"
属性(或更确切地说是标签助手)设置为布尔值:
selected
当<option value="@item.ApiID" selected="@item.IsSelected">@item.ApiTitle</option>
为true时,这将正确设置selected
属性;为false时,将完全省略该属性。
答案 2 :(得分:0)
我如何解决此问题的版本:
map
似乎比使用!更干净!版本