从后面的 ASP 代码中添加 Bootstrap 样式的单选按钮

Posted

技术标签:

【中文标题】从后面的 ASP 代码中添加 Bootstrap 样式的单选按钮【英文标题】:Add Bootstrap styled radio button from ASP code behind 【发布时间】:2016-03-27 04:19:58 【问题描述】:

我需要在网页上动态生成一组单选按钮。为了为 Bootstrap 设置适当的样式,它们需要如下所示:

<div class="col-sm-3">
    <div class="radio">
        <label>
            <input type="radio" name="radioButtonGroup" value="1" />
            Option 1
        </label>
    </div>
</div>

我目前正在从代码隐藏中生成按钮,如下所示:

RadioButton r = new RadioButton

    AutoPostBack = true,
    GroupName = "radioButtonGroup",
    Text = "Option 1"
;
r.Attributes.Add("Value", "1");
r.CheckedChanged += RadioButtonChanged;

htmlGenericControl inner = new HtmlGenericControl("div");
inner.Attributes.Add("class", "radio");
inner.Controls.Add(r);

HtmlGenericControl outer = new HtmlGenericControl("div");
outer.Attributes.Add("class", "col-lg-3");
outer.Controls.Add(inner);

RadioButtonDiv.Controls.Add(outer);

这给了我一些东西接近,但没有雪茄:

<div class="col-sm-3">
    <div class="radio">
        <input id="ctl00_body_ctl02" type="radio" name="ctl00$body$radioButtonGroup" value="1" onclick="javascript: setTimeout('__doPostBack(\'ctl00$body$ctl02\',\'\')', 0)">
        <label for="ctl00_body_ctl02">Option 1</label>
    </div>
</div>

忽略所有的 ASP 垃圾,问题是标签没有环绕输入,并且 Bootstrap 中的格式最终都很难看。

有谁知道强制 ASP.Net 将输入包装在标签中的方法?还是我以某种方式接近这个错误。

我看到的唯一其他选项是使用 AJAX 查询从 Javascript 生成单选按钮。实际上,在我意识到当值发生变化时我需要执行服务器端操作之前,我就开始了这条路。因此,尽管我可以在客户端创建它们并附加服务器端事件,但我会丢失每个帖子的状态。这样做可能是可行的,但它似乎更加笨拙。


更新:所以我意识到如果我不直接在单选按钮上设置文本,我可以将它包装在标签中。还是不行。我可以插入一个System.Web.UI.WebControls.Label,但它会在 HTML 中生成一个&lt;span&gt;。 我可以插入 new HtmlGenericControl("label"); 并正确生成标签,但我不能先添加控件和 然后 文本:

HtmlGenericControl radioLabel = new HtmlGenericControl("label");
radioLabel.Controls.Add(r);
radioLabel.InnerText = "Option1";

生成&lt;label&gt;Option1&lt;/label&gt;,但没有单选按钮。像这样颠倒控制和文本的顺序:

HtmlGenericControl radioLabel = new HtmlGenericControl("label");
radioLabel.InnerText = "Option1";
radioLabel.Controls.Add(r);

导致&lt;label&gt;Option1&lt;input ...&gt;&lt;/label&gt; 并且无法正确呈现(单选按钮与文本重叠)。

【问题讨论】:

【参考方案1】:

我找不到这样做的方法。我将把问题留在这里,因为我认为这仍然是一个有效的问题

我解决它的方法是在客户端 (javascript) 生成单选按钮并使用 AJAX POST 来触发服务器端操作(通过 WCF 数据服务)。

将此标记为正确答案感觉不对,因为这是一种变通方法,而不是严格意义上的问题答案。但是community wiki 说我应该发布并接受我找到的任何解决方案:

最终,您将解决问题或找到解决方法(可能是,“这不起作用,所以这就是我所做的”)。请添加包含此信息的答案并接受您自己的答案,以便有相同问题的其他人可以看到您最终遵循的路径。

也就是说,如果有人有其他方法,我很乐意更新“正确”答案。

【讨论】:

以上是关于从后面的 ASP 代码中添加 Bootstrap 样式的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

在 Asp.net 中从代码后面添加 Html

如何使用 ASP.NET 从后面的代码中添加一个额外的 css 类?

从后面的代码中删除 ASP.net 中 <li> 标记的 CSS 类

从 asp.net 中的代码中删除属性

从 InnerHTML 中的代码隐藏向页面添加 ASP 控件

如何从后面的代码中隐藏和显示 asp.net 中的 asp:buttons?