1
我创建了一个基于类似code example for a custom CheckBoxList呈现为无序列表的自定义RadioButtonList。自定义RadioButtonList丢失回传值
但由于某种原因,我的选定项目在执行回发时未保存。 我overrided的唯一方法是渲染法:
[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,则在回发后保存我选择的项目,所以没有任何内容覆盖我的值;它与自定义控件有关。
名称属性必须与我列表中的所有单选按钮相同,否则我可以选择多个单选按钮,这不是单选按钮的用途。 – thomasvdb 2011-05-06 09:23:03
@thomasvb,是的 - 我在提示更改名称属性时出错 - 我只是交叉检查并且ASP.NET也生成了相同的名称属性。在这种情况下,我认为这个问题可能与身份证生成有关。我会建议你评论你的渲染实现,并查看生成的单选按钮的ID并将其与渲染实现生成的ID进行比较。 – VinayC 2011-05-09 04:08:05