2012-04-07 139 views
0

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

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 Pleaseeeeeeeeeeeeee帮助别人

+1

你试过调试吗? – walther 2012-04-07 20:33:35

+1

'Console.WriteLine(ex);'不是在ASP.NET中显示异常的好方法。摆脱它。 – 2012-04-07 20:34:58

+0

是的,我一直在调试代码很长一段时间了。没有异常抛出,但“舞蹈”总是收到0 – user1318369 2012-04-07 20:49:31

回答

1

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

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

但是,将danceid放入listitem对象本身可能更好。只是在项目索引中使用基础ID会让我感到不寒而栗,尤其是当您从数据库填充列表时,因为当您将新项目添加到库中的列表中然后尝试按名称对其进行排序时会发生什么......然后你的指数变得毫无用处。

+0

非常感谢你!我为页面和下拉菜单都设置了EnableViewState =“True”,这样选中的项目就自动更新了。它现在工作的很好。我使用dances.SelectedItem.Value最初获取danceId,但是它并没有工作,所以后来改变了通过索引获取它。而且你是绝对正确的,如果一个新项目被添加到列表中,索引可能变得毫无用处。非常感谢帮助我:) – user1318369 2012-04-07 21:52:08

+0

请选择一个答案!顺便说一句,SelectedIted.Value不会为你做太多,如果你接近它,就像上面一样。您必须确保以与DataTextField相同的方式设置您的DataValueField,然后访问它以获取您的价值。 – Sinaesthetic 2012-04-07 22:00:37

+0

我用这种方法设置了我的DataValueField和DatatextField。 dances.DataSource = dt; dances.DataValueField = dt.Columns [0] .ToString(); dances.DataTextField = dt.Columns [1] .ToString();忘记在发布的代码中包含该代码,尽管 – user1318369 2012-04-07 22:29:31

1

更换

int danceIDFromDropDown = danceid; 

int danceIDFromDropDown = dances.SelectedIndex; 

它可能工作。

+0

是的,它的工作:) – user1318369 2012-04-08 05:03:19