剃刀未将我的“选定”值写入页面

时间:2018-08-04 19:44:05

标签: c# razor asp.net-core

我已经设置了以下循环,可以正确地填充选择控件:

<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之前的空格也不存在。

有人知道这是为什么吗?剃刀要在这里做些“聪明”的事情吗?

3 个答案:

答案 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

似乎比使用!更干净!版本