0

我正在使用以下代码将字典对象绑定到下拉列表中并从下拉列表中选择值。

 protected void Page_Load(object sender, EventArgs e)
    {
        Dictionary<int, string> dict = new Dictionary<int, string>();
        dict.Add(1, "apple");
        dict.Add(2, "bat");
        dict.Add(3, "cat");
        ddl.DataSource = dict;
        ddl.DataValueField = "Key";
        ddl.DataTextField = "Value";  //will display in ddl
        ddl.DataBind();
    }
    protected void btn_Click(object sender, EventArgs e)
    {
        string key = ddl.SelectedValue;
        string value = ddl.SelectedItem.Text;
    }

无论我在 ddl 中选择什么值,它的键值总是“1”,值“苹果”。我的代码有什么问题?

4

3 回答 3

3

那是因为您将每个帖子上的列表绑定回来,您应该检查IsPostBack一下

protected void Page_Load(object sender, EventArgs e)
{
     if(!Page.IsPostBack) // better if you refactor binding code to a method
       {
        Dictionary<int, string> dict = new Dictionary<int, string>();
        dict.Add(1, "apple");
        dict.Add(2, "bat");
        dict.Add(3, "cat");
        ddl.DataSource = dict;
        ddl.DataValueField = "Key";
        ddl.DataTextField = "Value";  //will display in ddl
        ddl.DataBind();
       }
}
于 2013-05-09T12:05:08.080 回答
2

dropdownlist每次页面加载时都会重置,因此使用 IsPostBack 更新代码,如下所示

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
   {
    // Validate initially to force asterisks
    // to appear before the first roundtrip.

    Dictionary<int, string> dict = new Dictionary<int, string>();
    dict.Add(1, "apple");
    dict.Add(2, "bat");
    dict.Add(3, "cat");
    ddl.DataSource = dict;
    ddl.DataValueField = "Key";
    ddl.DataTextField = "Value";  //will display in ddl
    ddl.DataBind();
   }
}
于 2013-05-09T12:06:01.250 回答
1

Sudha,您可以使用选择地图界面。

这实际上将满足您的要求,因为它将数据存储在键和值对的组合中。

于 2013-05-09T12:07:49.843 回答