ASP.NET RadioButtonList: 元素 'br' 不能嵌套在元素 'listitem' 中

ASP.NET RadioButtonList: the element 'br' cannot be nested within the element 'listitem'

例如我有这个单选按钮。

(o) item1  (o) item 2

但是,我希望它像:

(o) item1   (o) item2
  line here   line here

我当前的标记是:

<asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal" Width="650px" Font-Size="Smaller">
    <asp:ListItem Selected="True" Value="0">Relax<br>(MY MAN)</asp:ListItem>
    <asp:ListItem Value="1">Relax Again<br>(My Man)</asp:ListItem>
    <asp:ListItem Value="2">Relax Again 2<br>(MyMan)</asp:ListItem>
    <asp:ListItem Value="3">Relax 3<br>(My Man)</asp:ListItem>
    <asp:ListItem Value="4">Relax 4<br>(My Man)</asp:ListItem>
    <asp:ListItem Value="5">Relax 5<br>(My Man)</asp:ListItem>
    <asp:ListItem Value="6">Relax 6<br>(My Man)</asp:ListItem>
</asp:RadioButtonList>

但它会生成以下验证错误消息:the element 'br' cannot be nested within the element 'listitem'

注意:此处给出的解决方案实际上有效,但比必要的更复杂。请参阅 J Talati 对自己 post 的回答以获得最佳答案。


如果你想要一个没有错误的标记,你可以在 table 中使用共享相同 GroupName 的单独 RadioButtons 重现 RadioButtonList(这是 RadioButtonList 呈现的方式):

<table id="RadioButtonTable1" runat="server" class="radioList">
    <tr>
        <td>
            <asp:RadioButton runat="server" GroupName="RadioList" Checked="true" Value="0" Text="Relax<br />(MY MAN)" />
        </td>
        <td>
            <asp:RadioButton runat="server" GroupName="RadioList" Value="1" Text="Relax Again<br />(My Man)" />
        </td>
        <td>
            <asp:RadioButton runat="server" GroupName="RadioList" Value="2" Text="Relax Again 2<br />(MyMan)" />
        </td>
        ...
    </tr>
</table>

radioList class 样式允许自定义布局:

.radioList td
{
    text-align: left;
    width: 80px;
}

现在,获取所选值并不像获取 RadioButtonList 那样简单。你可以使用Jimmy在Better way to find control in ASP.NET中提供的class:

ControlFinder<RadioButton> radios = new ControlFinder<RadioButton>();
radios.FindChildControlsRecursive(RadioButtonTable1);
foreach (RadioButton rb in radios.FoundControls)
{
    if (rb.Checked)
    {
        string value = rb.Attributes["Value"];
        ...
        break;
    }
}

RadioButtons 没有 Value 属性 但可以在标记中添加该属性并按指示在代码隐藏中检索。

<asp:radiobuttonlist id="RadioButtonList1" runat="server" repeatdirection="Horizontal" width="650px" font-size="Smaller" xmlns:asp="#unknown">
<asp:listitem selected="True" value="0" text="Relax <br>(MY MAN)"></asp:listitem>
<asp:listitem value="1" text="Relax Again<br>(My Man)"></asp:listitem>
<asp:listitem value="2" text="Relax Again 2<br>(MyMan)"></asp:listitem>
<asp:listitem value="3" text="Relax 3<br>(My Man)"></asp:listitem>
<asp:listitem value="4" text="Relax 4<br>(My Man)"></asp:listitem>
<asp:listitem value="5" text="Relax 5<br>(My Man)"></asp:listitem>
<asp:listitem value="6" text="Relax 6<br>(My Man)"></asp:listitem>

成功了!哇哦!只需添加文本 属性 即可。