【发布时间】:2011-08-19 23:56:06
【问题描述】:
我创建了一个自定义 RadioButtonList,它基于类似的code example for a custom CheckBoxList 呈现为无序列表。
但由于某种原因,在执行回发时我选择的项目没有保存。 我覆盖的唯一方法是渲染方法:
[ToolboxData( "<{0}:ULRadioButtonList runat=server></{0}:ULRadioButtonList>" )]
public class ULRadioButtonList : RadioButtonList {
protected override void Render( HtmlTextWriter writer ) {
Controls.Clear();
string input = "<input id={0}{1}{0} name={0}{2}{0} type={0}radio{0} value={0}{3}{0}{4} />";
string label = "<label for={0}{1}{0}>{2}</label>";
string list = "<ul>";
if ( !String.IsNullOrEmpty( CssClass ) ) {
list = "<ul class=\"" + CssClass + "\">";
}
writer.WriteLine( list );
for ( int index = 0; index < Items.Count; index++ ) {
writer.Indent++;
writer.Indent++;
writer.WriteLine( "<li>" );
writer.Indent++;
StringBuilder sbInput = new StringBuilder();
StringBuilder sbLabel = new StringBuilder();
sbInput.AppendFormat(
input,
"\"",
base.ClientID + "_" + index.ToString(),
base.UniqueID,
base.Items[index].Value,
(base.Items[index].Selected ? " checked=\"\"" : "")
);
sbLabel.AppendFormat(
label,
"\"",
base.ClientID + "_" + index.ToString(),
base.Items[index].Text
);
writer.WriteLine( sbInput.ToString() );
writer.WriteLine( sbLabel.ToString() );
writer.Indent = 1;
writer.WriteLine( "</li>" );
writer.WriteLine();
writer.Indent = 1;
writer.Indent = 1;
}
writer.WriteLine( "</ul>" );
}
}
我是不是忘记了什么?如果我使用常规的 ASP.NET RadioButtonList,我选择的项目会在回发后保存,所以没有其他东西会覆盖我的值;它与自定义控件有关。
【问题讨论】:
标签: asp.net custom-controls radiobuttonlist