下拉列表回发(不同的概率)

时间:2011-12-13 06:31:39

标签: asp.net drop-down-menu postback webforms

大家好,我有一个奇怪的问题.. 我有这个下拉列表,其中不同的值将隐藏/显示页面中的一些文本框

 <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 ==“multiple ...”) 。因此,如果值更改为“自由文本...”,它将不会隐藏我想要的文本框

示例:

  1. 默认选择'多项选择..'

  2. 更改为'free ans ..'将隐藏文本框,但其他按钮未触发。

  3. 改回“多项选择......”它将转回'免费安排......'

  4. ddl.selected value仍是多项选择。

  5. 这里有什么问题..

3 个答案:

答案 0 :(得分:2)

因此:if (!Page.IsPostBack)

删除它。

这意味着它仅适用于第一次加载页面。

如果删除它,该功能将针对每个页面加载运行。

但为什么不使用dropdownlist selected index change event ??

那更好。

不要忘记在您的aspx AutoPostBack="true"

中添加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>

in 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
    }
}

答案 1 :(得分:0)

试试这个:

<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>

答案 2 :(得分:0)

我认为你的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;
    }  
}