0

我的网页中有一个下拉列表,无论用户选择哪个项目,它总是返回值 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);
        }
  }

该行 int danceIDFromDropDown = danceid; 在 dropthedance 方法中的值始终为 0。请帮助某人

4

2 回答 2

1

代替

int danceIDFromDropDown = danceid;

int danceIDFromDropDown = dances.SelectedIndex;

它可能会起作用。

于 2012-04-07T20:37:39.787 回答
1

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

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

But again, it might be better practice to place the danceid in the listitem object itself. Just the though of basing IDs on item indexes makes me shudder, especially when you populating the list from a database, because what happens when you add a new item to that list in the library and then try to sort them by name... then your indices become useless.

于 2012-04-07T21:14:42.833 回答