Как отключить переключатель ASP.NET с помощью JavaScript?

Привет всем! У меня возникла проблема с отключением элементов управления на странице ASP.NET через JavaScript. Все работает нормально, кроме переключателей - они теряют свое значение при отключении.

Вот часть моего кода:

private static void ОтключитьЭлемент(WebControl элемент)
{
    if (элемент is CheckBox)
    {
        ((CheckBox)элемент).InputAttributes.Add("disabled", "disabled");
    }
    else if (элемент is RadioButton)
    {
        // Что делать здесь?
    }
    // Другие проверки...
}

Проблема в том, что условие для RadioButton никогда не срабатывает, и переключатели определяются как CheckBox.

У меня два вопроса:

  1. Как правильно определить, что элемент - это переключатель?
  2. Как отключить его так, чтобы значение отправлялось на сервер?

Буду благодарен за любую помощь!

Слушай, тут дело в том, что 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);

надеюсь, это поможет! дай знать, если чтото непонятно