Iai*_*ser 4 css c# asp.net webforms radiobuttonlist
我在C#.NET 3.5 RadioButtonList中以编程方式生成单选按钮列表,并使用a 来执行此操作.但是,我觉得非常令人沮丧的是RepeatLayout属性,只能设置为Flow或Table.
表格用于表格数据,不用于显示表格.并且流程没有帮助,因为它不适合造型.
我真正想要的是一个可以用CSS解决的div嵌套.可以这样做吗?
一些例子来说明我正在谈论的内容和下面的示例代码.
流程示例
<span id="s1">
<input id="s1_0" type="radio" value="Answer A" name="s1">
<label for="s1_0">Answer A</label>
<br>
<input id="s1_1" type="radio" value="Answer B" name="s1">
<label for="s1_1">Answer B</label>
</span>
Run Code Online (Sandbox Code Playgroud)
表的例子
<table border="0" id="s1">
<tbody>
<tr>
<td><input type="radio" value="Answer A" name="s1" id="s1_0"><label for="s1_0">Answer A</label></td>
</tr>
<tr>
<td><input type="radio" value="Answer B" name="s1" id="s1_1"><label for="s1_1">Answer B</label></td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我真正想要的是什么
<div id="s1">
<div>
<input type="radio" value="Answer A" name="s1" id="s1_0">
<label for="s1_0">Answer A</label>
</div>
<div>
<input type="radio" value="Answer B" name="s1" id="s1_1">
<label for="s1_1">Answer B</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
C#代码我用来生成列表
我知道无论解决方案是什么,都不会像这样快速和简单,但我把它放在这里,这样你就可以了解我正在使用它的背景.
RadioButtonList rbl = new RadioButtonList { RepeatLayout = RepeatLayout.Table };
foreach (ControlValue cv in MasterControl.listControlValues)
{
rbl.Items.Add(new ListItem(cv.name, cv.value));
}
ControlContainer.Controls.Add(rbl);
Run Code Online (Sandbox Code Playgroud)
您可能希望使用WebControlAdapter来更改RadioButtonList呈现方式.
以下是您案例的完整代码:
public class RadioButtonListAdapter : WebControlAdapter
{
protected override void RenderBeginTag(HtmlTextWriter writer)
{
writer.RenderBeginTag("div");
}
protected override void RenderEndTag(HtmlTextWriter writer)
{
writer.RenderEndTag();
}
protected override void RenderContents(HtmlTextWriter writer)
{
var adaptedControl = (RadioButtonList) Control;
int itemCounter = 0;
writer.Indent++;
foreach (ListItem item in adaptedControl.Items)
{
var inputId = adaptedControl.ClientID + "_" + itemCounter++;
// item div
writer.RenderBeginTag("div");
writer.Indent++;
// input
writer.AddAttribute("type", "radio");
writer.AddAttribute("value", item.Value);
writer.AddAttribute("name", adaptedControl.ClientID);
writer.AddAttribute("id", inputId);
if (item.Selected)
{
writer.AddAttribute("checked", "checked");
}
writer.RenderBeginTag("input");
writer.RenderEndTag();
// label
writer.AddAttribute("for", inputId);
writer.RenderBeginTag("label");
writer.Write(item.Value);
writer.RenderEndTag();
// div
writer.Indent--;
writer.RenderEndTag();
}
writer.Indent--;
}
}
Run Code Online (Sandbox Code Playgroud)
要将此适配器连接到您的应用程序,您有两个选择.首先是在页面构造函数中以编程方式执行此操作:
var adapters = Context.Request.Browser.Adapters;
var radioButtonListType = typeof(RadioButtonList).AssemblyQualifiedName;
var adapterType = typeof(RadioButtonListAdapter).AssemblyQualifiedName;
if (!adapters.Contains(radioButtonListType))
{
adapters.Add(radioButtonListType, adapterType);
}
Run Code Online (Sandbox Code Playgroud)
第二个选项是使用.browser文件:
添加新Browser File项目.它将驻留在App_Browsers文件夹中.然后用以下声明替换内容:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.RadioButtonList"
adapterType="<your namespace>.RadioButtonListAdapter" />
</controlAdapters>
</browser>
</browsers>
Run Code Online (Sandbox Code Playgroud)
作为参考,您可以使用ScottGu的后期ASP.NET 2.0控制适配器体系结构中的链接,它们可以为本主题提供良好的基础.
还有一个开源CSS友好控制适配器项目,它解决了一些默认ASP.NET控件的渲染问题.
| 归档时间: |
|
| 查看次数: |
5039 次 |
| 最近记录: |