如何为下拉选择项c#分配值

时间:2014-01-01 08:02:30

标签: c# asp.net

我需要为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。如果用户在特定下拉列表中选择任何值,则不应增加。怎么做。任何想法......

3 个答案:

答案 0 :(得分:2)

您正在使用static变量,因此{@ 1}}值将保留在回发之间,并且对所有用户都是通用的,这是不正确的。

您需要将其存储在iViewStateHiddenField中,以保持回发之间的值,并为每个用户保持不同的值。

以下是我使用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)

您需要一个临时商店,例如ViewStateSession来保存您的价值并从中获取价值 那里。

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());
}