将 Bootstrap 样式应用于 RadioButtonList

Posted

技术标签:

【中文标题】将 Bootstrap 样式应用于 RadioButtonList【英文标题】:Applying Bootstrap styles to RadioButtonList 【发布时间】:2021-03-15 23:59:05 【问题描述】:

我有一个 ASP.NET WebForms 应用程序,它有一个 RadioButtonList,我想将 Bootstrap 的 CSS 类应用到它。

使用 RepeatLayout="Flow" 和 RepeatDirection="Vertical" 设置,RadioButtonList 将呈现如下:

<span id="PageContentPlaceHolder_RadioButtonList1">
    <input id="PageContentPlaceHolder_RadioButtonList1_0" type="radio" name="ctl00$PageContentPlaceHolder$RadioButtonList1" value="1" />
    <label for="PageContentPlaceHolder_RadioButtonList1_0">One</label>
    <br />
    <input id="PageContentPlaceHolder_RadioButtonList1_1" type="radio" name="ctl00$PageContentPlaceHolder$RadioButtonList1" value="2" />
    <label for="PageContentPlaceHolder_RadioButtonList1_1">Two</label>
    <br />
    <input id="PageContentPlaceHolder_RadioButtonList1_2" type="radio" name="ctl00$PageContentPlaceHolder$RadioButtonList1" value="3" />
    <label for="PageContentPlaceHolder_RadioButtonList1_2">Three</label>
</span>

我希望它像这样呈现(使用 Bootstrap 的 CSS 类):

<span id="PageContentPlaceHolder_RadioButtonList1">
    <div class="form-check">
        <input id="PageContentPlaceHolder_RadioButtonList1_0" type="radio" name="ctl00$PageContentPlaceHolder$RadioButtonList1" class="form-check-input" value="1" />
        <label for="PageContentPlaceHolder_RadioButtonList1_0" class="form-check-label">One</label>
    </div>
    <div class="form-check">
        <input id="PageContentPlaceHolder_RadioButtonList1_1" type="radio" name="ctl00$PageContentPlaceHolder$RadioButtonList1" class="form-check-input" value="2" />
        <label for="PageContentPlaceHolder_RadioButtonList1_1" class="form-check-label">Two</label>
    </div>
    <div class="form-check">
        <input id="PageContentPlaceHolder_RadioButtonList1_2" type="radio" name="ctl00$PageContentPlaceHolder$RadioButtonList1" class="form-check-input" value="3" />
        <label for="PageContentPlaceHolder_RadioButtonList1_2" class="form-check-label">Three</label>
    </div>
</span>

我意识到,如果我使用 Repeater 并将单个 RadioButton 和 Label 控件放在 ItemTemplate 中,我可以在其中应用 CssClass 值,这可能更容易做到。但是,我还需要附加一个RequiredFieldValidator 以确保用户做出选择。基本上这是一个选择题考试,我不能预先选择任何单选按钮项目。我没有太多运气让验证器使用它单独的单选按钮。如果我能提供客户端和服务器端验证代码,我想 CustomValidator 可能会起作用。

获得我想要的结果的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我喜欢使用单选按钮作为子页面菜单。它们非常好,因此背后的代码也非常好。

所以说我有这个:

我的样式表是这样的:

  body 
    

    .radionav input 
        width: 12px;
        margin-top: 0px;
    

    .radionav label 
        display: inline-block;
        border: 1px solid black;
        border-radius: 25px;
        height: 35px;
        padding-top: 18px;
        padding-right: 6px;
        margin-left: -20px;
        padding-left: 25px;
    

    .radionav input[type="radio"]:checked + label 
        display: inline-block;
        border: 1px solid black;
        border-radius: 25px;
        height: 35px;
        padding-top: 18px;
        padding-right: 6px;
        margin-left: -20px;
        padding-left: 20px;
        background: #253B82;
        color: white;
        border-spacing: 10px;
    

    .radionav:after 
        content: '';
        display: inline-block;
        width: 20px;
    

上面的收音机标记变成了这样:

        <div style="float:left;padding-right:10px">
            <asp:RadioButtonList ID="ShowProjects" runat="server" RepeatLayout="Flow"
                AutoPostBack="True" RepeatDirection="Horizontal"  >
                <asp:ListItem Class="radionav" Selected="True">Live Projects</asp:ListItem>
                <asp:ListItem Class="radionav" >All Projects</asp:ListItem>
                <asp:ListItem Class="radionav" >My Proofs</asp:ListItem>
                <asp:ListItem Class="radionav"> Create (start) a new Project </asp:ListItem>
            </asp:RadioButtonList>
        </div>

现在我们得到了这个:

您当然可以调整 css - 也许将按钮加长一点,或者说窄一些。我不得不真正切碎 css,但现在我只需放入一个单选按钮列表,对其进行样式设置,然后我就有一个很好的事件代码可以使用。

所以,我的代码可能是:

   Select Case ShowProjects.SelectedIndex
        Case 0
             strWhere = "(Void = 0)"   ' show live projects
             Call LoadGrid(strWhere)
        Case 1
            strWhere = ""              ' show all projects
            Call LoadGrid(strWhere)
        Case 2
            ' show proofs
        Case 3
            ' create a project
    End Select

【讨论】:

以上是关于将 Bootstrap 样式应用于 RadioButtonList的主要内容,如果未能解决你的问题,请参考以下文章

将 bootstrap has-error 样式应用于 select2 元素

如何在发布/加载网页之前全局应用Bootstrap样式类

将引导样式应用于 django 表单

如何在下拉链接上应用 Bootstrap 4 选择样式,例如:a 标签

将样式应用于jqgrid

如何使用 Bootstrap 设置 Stripe Elements 输入的样式?