изменение класса javascript на asp: управление кнопками недоступно на стороне сервера

#c# #javascript

#c# #javascript

Вопрос:

Итак, я несколько дней искал онлайн-решение этой проблемы, и я пробовал разные способы сделать это, но, похоже, не могу найти полного решения. Поэтому, пожалуйста, ПОМОГИТЕ!

У меня есть форма, которую пользователь заполняет онлайн. В какой-то момент формы они выбирают ключевые слова, которые они хотят связать со своими входными данными. Я создал табличный макет кнопок с каждым ключевым словом в кнопке.

 <asp:Button 
    ID="button1" 
    Text="Kid Friendly" 
    CssClass="button_off"  
    runat="server" 
    onclientclick="change_select(this);" 
    OnClick="return false;" >
</asp:Button>
<br />
<asp:Button 
    ID="button2" 
    Text="Romantic" 
    CssClass="button_off"  
    runat="server" 
    onclientclick="change_select(this);" 
    OnClick="return false;" >
</asp:Button>
<br />
  

.. и так далее.
Кнопки имеют синий фон. Если пользователь нажимает на кнопку, он запускает javascript для изменения класса кнопки, что меняет фон на зеленый.

 function change_select(objs)
{
    var mydoc = objs.className;
    if (mydoc == "button_off") 
    {
        objs.className = "button_on";
        document.getElementById("button1").setAttribute("SkinID", "3");
    }
    else 
    {
        objs.className = "button_off";
    }
}
  

Затем внизу у меня есть кнопка для отправки информации:

  <asp:Button ID="button4" Text="Verify"  runat="server" onclick="verify" >
  

Когда я тестирую страницу, нажатие на кнопки изменяет класс, а фоны меняются взад и вперед, но когда я пытаюсь захватить класс каждого элемента на стороне сервера, он всегда возвращается как «button_off».

 protected void verify(object sender, EventArgs e)
{
    var myValue = button1.CssClass.ToString();
    string myInfo = "<h3>Your buttons</h3><p>Here is the class: "   myValue;

    myResults.InnerHtml = myInfo.ToString()
}
  

Как C # на стороне сервера может узнать, что пользователь изменил класс? Я пытался изменить их на элементы HTML, подходящие для детей, но я не мог понять, как ссылаться на элемент HTML на стороне сервера. Я нашел сообщения в областях с кодом для этого (ссылающимся на HTMLElement), но этот код никогда не работал на моей машине разработки.

Да, я мог бы просто сделать ключевые слова метками и добавить флажки рядом с каждым из них, но это так скучно; Я пытался создать здесь более интересный интерфейс. Пожалуйста, помогите!

Ответ №1:

Попробуйте сохранить класс css в скрытом поле при отправке.

Комментарии:

1. Когда страница будет отправлена обратно из-за события нажатия кнопки, элементы вернутся к своему обычному состоянию CssClass. Поэтому вы должны использовать что-то другое для хранения этого нового класса. Скрытое поле, как предложено, или файл cookie / сеанс / что угодно еще.

2. Да, я тоже об этом думал. Добавление скрытого поля для каждого элемента button и сохранение в нем значения, но это кажется большим количеством кода. Кто-то посоветовал мне посмотреть на виджет кнопок jquery, который делает флажки похожими на кнопки. Я думаю, что это, вероятно, будет моим ответом.