Привет всем! У меня возникла проблема с отключением элементов управления на странице ASP.NET через JavaScript. Все работает нормально, кроме переключателей - они теряют свое значение при отключении.
Вот часть моего кода:
private static void ОтключитьЭлемент(WebControl элемент)
{
if (элемент is CheckBox)
{
((CheckBox)элемент).InputAttributes.Add("disabled", "disabled");
}
else if (элемент is RadioButton)
{
// Что делать здесь?
}
// Другие проверки...
}
Проблема в том, что условие для RadioButton никогда не срабатывает, и переключатели определяются как CheckBox.
У меня два вопроса:
- Как правильно определить, что элемент - это переключатель?
- Как отключить его так, чтобы значение отправлялось на сервер?
Буду благодарен за любую помощь!
Слушай, тут дело в том, что RadioButton - это не отдельный элемент управления, а группа связанных CheckBox’ов. Попробуй так:
foreach (Control control in form.Controls)
{
if (control is CheckBox && ((CheckBox)control).GroupName != “”)
{
((CheckBox)control).Attributes[“disabled”] = “disabled”;
// Добавь скрытое поле для сохранения значения
}
}
Это должно отключить все переключатели в группе. Для сохранения значений можешь использовать скрытые поля, как предложил nat_miller. Удачи!
Ребят, а может проще через JavaScript это сделать? Типа:
document.querySelectorAll(‘input[type=“radio”]’).forEach(radio => {
radio.disabled = true;
let hidden = document.createElement(‘input’);
hidden.type = ‘hidden’;
hidden.name = radio.name;
hidden.value = radio.checked;
radio.parentNode.appendChild(hidden);
});
Так отключим все радиокнопки и сохраним их значения. Работает для любого фреймворка. Как думаете?
слушай, у меня была похожая проблема недавно. оказалось, что RadioButton в asp.net наследуется от CheckBox, поэтому твоя проверка не срабатывает. попробуй вместо этого использовать typeof:
if (элемент.GetType() == typeof(RadioButton))
{
((RadioButton)элемент).Attributes.Add(“disabled”, “disabled”);
}
а чтобы значение отправлялось на сервер даже при отключенном переключателе, можно добавить скрытое поле с тем же значением. примерно так:
var hiddenField = new HiddenField();
hiddenField.ID = элемент.ID + “_hidden”;
hiddenField.Value = ((RadioButton)элемент).Checked.ToString();
элемент.Parent.Controls.Add(hiddenField);
надеюсь, это поможет! дай знать, если чтото непонятно