Razor 没有将我的“选定”值写入页面

A X*_*A X 4 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>
Run Code Online (Sandbox Code Playgroud)

我正在尝试@item.SelectedString将字符串“selected”添加到所选组合框项目的页面中。

但是,这是行不通的。因此,作为测试,我只是强制该字符串始终为“测试”,但是,页面生成的 HTML 却@item.SelectedString从未出现过!另外,之前的空间@item.SelectedString也不在了。

有人知道为什么是这样吗?Razor 是否试图在这里做一些“聪明”的事情?

pok*_*oke 14

通常不能在 HTML 标记内输出任意字符串。HTML 实际上是由 Razor 解析其标签助手功能的,因此它需要格式正确。如果您尝试这样做,您只会收到以下错误:

\n\n
\n

错误 RZ1031:标签助手“选项”在元素的属性声明区域中不得包含 C#。

\n
\n\n

!您可以通过在标签名称前面添加 来禁用标签帮助器解析:

\n\n\n\n
<!option value="@item.ApiID" @item.SelectedString>@item.ApiTitle</!option>\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,更好的选择是简单地使用标签助手来选择选项:您实际上不需要构造一个SelectedString仅包含"selected". 相反,您可以将元素(或者更确切地说是标签助手)的属性设置为布尔值selected

\n\n
<option value="@item.ApiID" selected="@item.IsSelected">@item.ApiTitle</option>\n
Run Code Online (Sandbox Code Playgroud)\n\n

当为 true 时,这将正确设置selected属性item.IsSelected,或者当为 false 时完全忽略该属性。

\n


Jas*_*sen 9

新的标签助手会覆盖您的尝试。

您可以手动选择退出<option>与元素!

<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/>
Run Code Online (Sandbox Code Playgroud)