我需要为aspx中的选定值下拉值分配值,例如
下拉列表项
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
AutoPostBack="True">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"
AutoPostBack="True">
<asp:ListItem>a</asp:ListItem>
<asp:ListItem>b</asp:ListItem>
<asp:ListItem>c</asp:ListItem>
</asp:DropDownList>
如果用户选择dropdownlist1中的任何项目,则应该增加值2 如果用户选择dropdownlist2中的任何项目,它应该增加值2
我需要显示总数
我试过这段代码
static int i = 0;
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
i += 2;
Label1.Text = "hello"+i;
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
i += 2;
Label1.Text = "hello"+i;
}
它的工作但问题是如果用户首先在下拉列表中选择1 // i = 2然后用户选择b // i = 4如果用户再次选择1 // i = 6。如果用户在特定下拉列表中选择任何值,则不应增加。怎么做。任何想法......
答案 0 :(得分:2)
您正在使用static
变量,因此{@ 1}}值将保留在回发之间,并且对所有用户都是通用的,这是不正确的。
您需要将其存储在i
,ViewState
或HiddenField
中,以保持回发之间的值,并为每个用户保持不同的值。
以下是我使用Session
完成的事情:
ViewState
答案 1 :(得分:1)
上面的答案中很少有人讨论静态变量在回发后获得 重置 ,这是不正确,静态变量会保留其值应用程序域的持续时间。在重新启动Web服务器Asp.net Static Variable Life time Across Refresh and PostBack
之前,它将在许多浏览器会话中存活话虽如此,使用静态变量绝对不是一个好主意,而是使用Session或Viewstate建议的方法。
关于你的问题,我想你只想在第一次从下拉列表中选择一个值时增加该值,为了达到这个目的,你想要一个标志让你知道这个值是否已被选中,在以下几行:
static bool DrpDown1;
static bool DrpDown2;
static int i = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DrpDown1 = false;
DrpDown2 = false;
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
if (!DrpDown1)
{
i += 2;
Label1.Text = "hello" + i;
DrpDown1 = true;
}
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
if (!DrpDown2)
{
i += 2;
Label1.Text = "hello" + i;
DrpDown2 = true;
}
}
答案 2 :(得分:0)
您需要一个临时商店,例如ViewState
或Session
来保存您的价值并从中获取价值
那里。
private int GetValue()
{
return Int32.Parse(ViewState["temp"]);
}
private void SetValue(int i)
{
if(ViewState["temp"]==null)
{
ViewState["temp"]=i;
}
else
{
ViewState["temp"]= i+Int32.Parse(ViewState["temp"]);
}
}
并在您的代码中使用它,如下所示
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
SetValue(2);
Label1.Text = string.Format("hello{0}", GetValue());
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
SetValue(2);
Label1.Text = string.Format("hello{0}", GetValue());
}