выпадающий список (другая проблема) - PullRequest
1 голос
/ 13 декабря 2011

Привет, ребята, у меня есть странная проблема здесь .. У меня есть этот выпадающий список, где различные значения будут скрывать / показывать некоторые текстовые поля на странице

 <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
              <asp:ListItem>Multiple Choice Question</asp:ListItem>
              <asp:ListItem>Free text answer</asp:ListItem>
                            </asp:DropDownList>

Код C # позади, внутри Page_Load:

   if (Page.IsPostBack)
    {
        if (DropDownList1.SelectedValue == "Multiple Choice Question")
        {
            tb_ans.Visible = true;
            tb_ans2.Visible = true;
        }
        else
        {
            tb_ans2.Visible = false;
            tb_ans.Visible = false;
        }
    }
    if (!Page.IsPostBack) //the code within this statement will only load
    {
        Session["no"] = null;
        this.opt3.Attributes["style"] = "display: none;";
        .....
        opt3.Visible = false;
        ....
    }

Попытка отладки, и результат был: (я установил точку останова при загрузке страницы), когда я выбираю другое значение из выпадающего списка.3-й раз при изменении значения, похоже, что выпадающий список сохраняет то же значение, что и 2-е значение.

цикл всегда идет в if (ddl.selectedvalue == "множественный ...").В результате он не будет скрывать текстовое поле, которое мне нужно, если значение будет изменено на «свободный текст ...»

пример:

  1. выбор по умолчанию 'несколькоВыбор .. '

  2. изменение на «свободный ответ» скрывает текстовое поле, но другая кнопка не срабатывает.

  3. изменить обратно на'множественный выбор ...' он вернется к 'свободному и ..'

  4. ddl. выбранное значение по-прежнему является множественным выбором.

в чем здесь проблема ..

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Из-за этого: if (!Page.IsPostBack)

Удалите это.

Это означает, что он работает только в первый раз при загрузке страницы.

Если вы удалите это, эта функция будет работать при каждой загрузке страницы.

Но почему бы вам не использовать dropdownlist selected index change event ??

Так лучше.

Не забудьте добавить AutoPostBack="true" в aspx dropdownlist

Хорошо. Я хочу написать так.

в aspx

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
        onselectedindexchanged="DropDownList1_SelectedIndexChanged">
        <asp:ListItem Selected="True" Value="multiple">Multiple Choice Question</asp:ListItem>
        <asp:ListItem Value="free">Free text answer</asp:ListItem>
</asp:DropDownList>

в CS

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.PostBack)
    {//write your other things which are not related to DropDownList1  }
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    if(DropDownList1.SelectedValue.ToString().Trim().Contains("multiple"))
    {
        ////do something
    }
    else if (DropDownList1.SelectedValue.ToString().Trim().Contains("free"))
    {
        //do something
    }
}
0 голосов
/ 13 декабря 2011

Я думаю, что ваше if состояние полностью противоположно тому, что вы хотите.Свойство Page.IsPostBack равно true, когда страница публикуется обратно из раскрывающегося списка.Вы должны иметь это так:

if (Page.IsPostBack)  
{  
    if (DropDownList1.SelectedValue == "Multiple Choice Question")  
    {  
        tb_ans.Visible = true;  
        tb_ans2.Visible = true;  
    }  
    else  
    {  
        tb_ans2.Visible = false;  
        tb_ans.Visible = false;
    }  
}
0 голосов
/ 13 декабря 2011

Попробуйте это:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
                                onselectedindexchanged="DropDownList1_SelectedIndexChanged">
                                <asp:ListItem Text="Multiple Choice Question" Value="Multiple Choice Question" Selected=selected></asp:ListItem>
                                <asp:ListItem Text="Free text answer" Value="Free text answer"></asp:ListItem>
                            </asp:DropDownList>
...