Я пишу WebApplication, который имеет список элементов управления RadioButton, динамически генерируемых на основе информации из базы данных. Моя проблема заключается в том, что RadioButton, который я «проверяю», не отображается как проверенный.Динамически созданная радио кнопка не отображается Проверено ASP.NET
HTML:
<asp:CustomValidator ID="vgCheckRequiredChoice" Display="Static" runat="server" ValidationGroup="vgTicketTypeChoice"
Text="You must select an office location to continue." ForeColor="Red"></asp:CustomValidator>
<table style="padding: 10px 10px 10px 10px; width: 100%" cellpadding="5px 5px 5px 5px">
<asp:Repeater ID="rptType" runat="server" OnItemDataBound="rptType_ItemDataBound">
<ItemTemplate>
<tr style="border-bottom: solid 1px #000000; padding: 40px 10px 10px 10px;">
<td style="width: 30%;">
<asp:RadioButton runat="server" ID="RadioButtonLocation" Text='<%# Bind("LocationName") %>'
GroupName='<%# Bind("LocationID") %>' ValidationGroup="vgTicketTypeChoice"
CausesValidation="true" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<div style="float: right; display: inline; padding-right: 20px; padding-top: 20px;">
<asp:Button runat="server" ID="ButtonCancel" Text="Cancel" PostBackUrl="~/Default.aspx" />
<asp:Button runat="server" ID="ButtonDefiningLocation" Text="Next >>"OnClick="ButtonDefiningLocation_Click" />
</div>
Вот JavaScript, который я использую, чтобы проверить каждый уникальный RadioButton:
<script type="text/javascript">
function SetUniqueRadioButton(nameregex, current) {
re = new RegExp(nameregex);
for (i = 0; i < document.forms[0].elements.length; i++) {
elm = document.forms[0].elements[i]
if (elm.type === 'radio') {
if (re.test(elm.name)) {
elm.checked = false;
}
}
}
current.checked = true;
}
</script>
Последнее, но не менее CodeBehind:
protected void rptType_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem)
return;
RadioButton rdo = (RadioButton)e.Item.FindControl("RadioButtonLocation");
string script =
"SetUniqueRadioButton('rptType.*VisitingOffice',this)";
rdo.Attributes.Add("onclick", script);
}
protected void ButtonDefiningLocation_Click(object sender, EventArgs e)
{
rptType.DataBind();
if (Page.IsValid)
{
foreach (RepeaterItem ri in rptType.Items)
{
switch (ri.ItemType)
{
case ListItemType.Item:
case ListItemType.AlternatingItem:
RadioButton rb = (RadioButton)ri.FindControl("RadioButtonLocation");
if (rb.Checked)
{
var LocationID = rb.GroupName;
DataService ds = new DataService();
DataTable tbl = ds.GetLocation(LocationID);
Response.Write(LocationID);
}
break;
}
}
}
}
As вы можете видеть, в коде, когда я прохожу через программу и перехожу к «rb.checked», она отобразит правильные параметры для rb (Пример: {Text = "Houston" Checked = false}, даже если Хьюстон является выбранным RadioButton.)
EDIT: Я отследил его до функции javascript. Функция javascript не устанавливает current.checked равным true. Теперь я понятия не имею, почему это происходит, когда оно явно вызывается в функции. Любые предложения или советы будут высоко оценены.
Вопрос о возврате потенциально? –
Спасибо за предложение! Поразмыслить немного? Где вы видите возможность обратной проблемы? – imnotverygoodatthis
Было просто ощущение кишки, глядя на него снова, кажется маловероятным, поскольку вы используете Javascript для установки атрибутов. У меня только что возникла проблема с элементами управления, сбросив их атрибуты при отправке назад и не поймав его. –