Событие OnSelectedIndexChanged RadioButtonList не срабатывает

У меня есть RadioButtonList в asp.net. Я пытаюсь сделать простую вещь, т.е. отобразить или скрыть div при изменении переключателей из списка. Но событие OnSelectedIndexChanged не срабатывает. Я не понимаю причину. это код

<asp:RadioButtonList ID="CityStateZip" runat="server" ForeColor="#333300" AutoPostBack="true" RepeatDirection="Horizontal"  Width="274px" CausesValidation="true" ValidationGroup="SchoolSearchGroup"  OnSelectedIndexChanged="CityStateZip_SelectedIndexChanged">
                <asp:ListItem  Value="1" Text="City and State" />
                <asp:ListItem Value="2" Text="Zip Code" />
</asp:RadioButtonList>
<div id="zipcodediv" runat="server" visible="false" style="margin-left:75px">
 code.........
</div>
<div id="citystatediv" runat="server" style="margin-left:75px; width: 708px;">
code........
</div>

Код позади

 protected void CityStateZip_SelectedIndexChanged(Object sender,EventArgs e)
    {           
        if (CityStateZip.SelectedValue == "1")
        {               
            zipcodediv.Visible = false;
            citystatediv.Visible = true;
        }
        if (CityStateZip.SelectedValue == "2")
        {                
            citystatediv.Visible = false;
            zipcodediv.Visible = true;
        }
    }

person samiaj    schedule 28.12.2012    source источник
comment
Покажите нам код, как вы связываете RadioButtonList   -  person Adil    schedule 28.12.2012
comment
Вы можете сделать эту клиентскую часть с помощью Jquery/Javascript   -  person Satinder singh    schedule 28.12.2012
comment
@satinder singh, спасибо. Но по какой-то причине я не могу использовать jquery/js   -  person samiaj    schedule 28.12.2012
comment
@sami: это не очень хорошая практика для Pageload, чтобы просто скрыть div   -  person Satinder singh    schedule 28.12.2012
comment
@sami, я проверил твой код, и он отлично работает. :)   -  person Amir    schedule 28.12.2012
comment
@Amir: да, код в порядке, и для хорошей практики это можно сделать на стороне клиента.   -  person Satinder singh    schedule 28.12.2012


Ответы (5)


Вот как это можно сделать на клиентской стороне.
Добавьте файл JQuery Script в тег заголовка и имя вашей функции javascript здесь (selectValue)
Протестированный код:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript">

        function selectValue() {

            if (document.getElementById("CityStateZip_0").checked == true) {

                $("#divOne").show(100);
                $("#divTwo").hide(100);

            }

            if (document.getElementById("CityStateZip_1").checked == true) {

                $("#divOne").hide(100);
                $("#divTwo").show(100);

            } 
        }
    </script>

Матрица HTML:

  <div>
        <asp:RadioButtonList ID="CityStateZip" runat="server" onchange="return selectValue();"
            RepeatDirection="Horizontal">
            <asp:ListItem Value="1" Selected="True">City and State</asp:ListItem>
            <asp:ListItem Value="2">Zip Code</asp:ListItem>

        </asp:RadioButtonList>
    </div><br /><br />
        <div id="divOne">
            <h3>Div one...</h3>
            Enter your City State content
        </div>

        <div id="divTwo">
            <h3>Div two...</h3>
            Enter you Zip code content
        </div>
person Satinder singh    schedule 28.12.2012
comment
Спасибо, Сатиндер Сингх. Но OnSelectedIndexChanged=return dataSelect() показывает некоторую ошибку (ошибка синтаксического анализа). Я пробовал с точкой с запятой, как и в вашем коде, он также показывает ту же ошибку. - person samiaj; 28.12.2012
comment
@sami: это НЕ OnSelectedIndexChanged это onchange - person Satinder singh; 28.12.2012
comment
: Что такое ContentPlaceHolder1_CityStateZip_0 и ContentPlaceHolder1_CityStateZip_1 - person samiaj; 02.01.2013
comment
Это ваш пункт ContentPlaceHolder1_CityStateZip_0, т.е. город и штат, а ContentPlaceHolder1_CityStateZip_1 – почтовый индекс. ContentPlaceHolder1, потому что он размещен под тегом ContentPlaceHolder1 - person Satinder singh; 02.01.2013
comment
И два, если условие не работает. Можете ли вы предложить любую другую идею для того же самого. Спасибо за прекрасное сотрудничество. - person samiaj; 02.01.2013
comment
Нет, сэр. Это ничего не меняет. - person samiaj; 02.01.2013
comment
Вы применили файл jquery - person Satinder singh; 02.01.2013
comment
да .. Вы можете видеть ваш код, обновленный мной. Теперь он содержит 3 оповещения. Оповещение (1) только отображается. - person samiaj; 02.01.2013
comment
‹asp:RadioButtonList ID=CityStateZip runat=server ForeColor=#333300 RepeatDirection=Horizontal Width=274px CausesValidation=true ValidationGroup=SchoolSearchGroup onclick=javascript:divSelect();› ‹asp:ListItem Value=citystate Text=Город и штат /› ‹ asp:ListItem Value=zip Text=Zip Code /› ‹/asp:RadioButtonList› - person samiaj; 02.01.2013
comment
@sami: Посмотрите мой ответ об обновлении, я проверил на своем компьютере, и он работает нормально, но у вас возникли проблемы, дайте мне знать - person Satinder singh; 02.01.2013

У меня была та же проблема, что и у вас, и я исправил ее, добавив AutoPostBack="true" к моему определению RadioButtonList в ASPX. Кажется, это уже есть в вашем определении, но для всех, кто придет сюда позже, это может быть все, что вам нужно.

person JMD    schedule 18.03.2016

Хотя я согласен с большинством ответов, что если это просто то, что вы пытаетесь сделать, то вы должны делать это на стороне клиента. Однако, если вы делаете что-то более сложное, требующее действий на стороне сервера, вам нужно сначала выяснить, почему ваша функция не вызывается. Хотя я не эксперт в этой области, первое, на что я бы обратил внимание, это защищенный вызов. Изменение этого на общедоступное может сработать для вас. Все остальное, что я посмотрел, кажется, в порядке. Еще один совет, который у меня есть для вас, — проверить, действительно ли вызывается ваша функция, — сделать что-то очень простое, в вашем случае я бы вынул операторы if и посмотрел, работает ли это: zipcodediv.Visible = false ; citystatediv.Visible = true;

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

person illinoistim    schedule 28.12.2012
comment
Поскольку сгенерированный класс для страницы ASPX расширяет класс кода программной части, protected является подходящим и предпочтительным, если только нет (опрометчивой) необходимости также предоставлять этот обработчик другим классам. В моем случае я установил точку останова в верхней части метода, но отладчик все еще не остановился там. На самом деле загрузка страницы вообще не происходит при выборе нового элемента в RadioButtonList. Хм. [Обновление: он начал работать для меня, как только я добавил AutoPostBack="true" к элементу управления в ASPX.] - person JMD; 18.03.2016

Я предполагаю, что вы могли бы установить видимость элементов управления, которые вы разместили внутри div, как ложную. Если да, то удалите его и повторите попытку. Если нет, то было бы полезно, если бы вы разместили код, который вы поместили в div, потому что у вас нет другой ошибки в вашем коде, и поэтому проблема должна быть внутри div.

person Srinivas    schedule 28.12.2012

Попробуйте изменить CausesValidation на «false», если есть какие-либо проблемы с проверкой.

person Pawan Nogariya    schedule 28.12.2012