비슷한 code example for a custom CheckBoxList을 기반으로 정렬되지 않은 목록으로 렌더링하는 사용자 정의 RadioButtonList를 만들었습니다.사용자 정의 RadioButtonList가 PostBack에서 값을 잃습니다.
하지만 다시 게시를 수행 할 때 어떤 이유로 내 선택한 항목이 저장되지 않습니다. 내가 오버라이드 유일한 방법은 렌더링-방법 :
[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
@thomasvb, 예 - 이름 속성 변경을 제안하는 데 잘못이있었습니다. 크로스 체크 만하고 ASP.NET도 같은 이름 속성을 생성합니다. 이 경우 문제는 ID 생성과 관련 될 수 있다고 생각합니다. 렌더링 구현에 주석을 달고 라디오 버튼에 대해 생성 된 ID를보고 렌더링 구현에 의해 생성 된 ID와 비교해 볼 것을 제안합니다. – VinayC