对于下拉列表,SelectedIndex始终返回值0

时间:2012-04-07 20:31:10

标签: c# asp.net

我的网页上有一个下拉列表,无论用户选择哪个项目,它都会返回值0作为选定的索引。我使用数据库查询填充了下拉列表。我正在填写页面中的Page_Load方法。下面显示的代码执行指定的工作:int danceid;

    protected void Page_Load(Object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            PopulateDanceDropDown();
        }

    }    

    private void PopulateDanceDropDown()
    {         
        DataTable dt = new DataTable();DataRow row = null;
        dt.Columns.Add("Did", Type.GetType("System.Int32"));
        dt.Columns.Add("DName", Type.GetType("System.String"));    
        var dancer_dance = (from dd in context.DANCER_AND_DANCE
                       where dd.UserId == dancerId
                       select new
                       {
                           Value = dd.DanceId,
                           Text = dd.DanceName

                       }).ToList();    

        foreach (var dndd in dancer_dance)
        {        
            row = dt.NewRow();
            row["Did"] = dndd.Value;
            row["DName"] = dndd.Text;
            dt.Rows.Add(row);    dances.DataSource = dt;    
            dances.DataTextField = dt.Columns[1].ToString();
        if (!IsPostBack)
        {
            dances.DataBind();
        }

    }    
    protected void changeIndex(object o, EventArgs e)
    {
        danceid = dances.SelectedIndex;
    }
    protected void dropthedance(object o, EventArgs e)
    {
        int danceIDFromDropDown = danceid;
        var dancer_dance = from dd in context.DANCER_AND_DANCE
                           where dd.DanceId == danceIDFromDropDown
                           select dd;
        foreach (var dndd in dancer_dance)
        {
             context.DANCER_AND_DANCE.DeleteOnSubmit(dndd);

        }
        try
        {
            context.SubmitChanges();
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
  }

line int danceIDFromDropDown = danceid;在方法中,dropthedance总是具有值0. Pleaseeeeeeeeeeeeee帮助某人

2 个答案:

答案 0 :(得分:1)

替换

int danceIDFromDropDown = danceid;

int danceIDFromDropDown = dances.SelectedIndex;

它可能有用。

答案 1 :(得分:1)

您确定要将索引用作ID吗?通常,您将要将数据库中的实际ID设置为DataValueField,然后您可以通过该方式获取值。

但我也注意到你抓取索引并将其放在indexchanged事件的变量中,然后尝试在不同的方法中使用该值。我假设舞蹈是某个未在此处显示的属性。无论如何,价值不会通过回发持续存在。不要像在桌面应用程序上那样尝试将其存储在变量中,而是尝试将EnableViewState =“True”添加到下拉控件中。然后直接在提交处理程序上获取该索引。或者,如果您确实希望将其存储在变量中,则尝试通过将该变量存储在会话中或缓存该变量来保持该变量的值,然后在实际使用该值时从该缓存/会话变量中拉出。

但同样,将danceid放在listitem对象本身可能是更好的做法。只是在项目索引上建立ID会让我不寒而栗,尤其是当您从数据库填充列表时,因为当您向库中的该列表添加新项目然后尝试按名称对它们进行排序时会发生什么...然后你的指数变得无用。