大家好,我有一个奇怪的问题.. 我有这个下拉列表,其中不同的值将隐藏/显示页面中的一些文本框
<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 ...”) 。因此,如果值更改为“自由文本...”,它将不会隐藏我想要的文本框
示例:
默认选择'多项选择..'
更改为'free ans ..'将隐藏文本框,但其他按钮未触发。
改回“多项选择......”它将转回'免费安排......'
ddl.selected value仍是多项选择。
这里有什么问题..
答案 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;
}
}