我在我的网页中有一个下拉列表,无论用户选择哪个项目,它总是返回0作为选择的索引。我已经使用DB查询填充了下拉列表。并且我在我的页面中填充了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);
}
}在方法dropthedance中,行int danceIDFromDropDown = danceid;的值始终为0。请救救某人!
发布于 2012-04-08 05:14:43
您确定要使用索引作为ID吗?通常,您需要将数据库中的实际ID设置为DataValueField,然后就可以通过这种方式获取该值。
但我也注意到,您获取索引并将其放入indexchanged事件的变量中,然后尝试在不同的方法中使用该值。我假设danceid是这里没有显示的属性。无论如何,该值不会通过回发持久存在。不要像在桌面应用程序中那样尝试将其存储在变量中,而是尝试将EnableViewState="True“添加到下拉控件中。然后直接在提交处理程序上获取该索引。或者,如果您确实想将其存储在一个变量中,那么尝试通过将该变量的值存储在会话中或对其进行缓存来持久化该变量的值,然后在实际使用该值时从该缓存/会话变量中提取该值。
但是,更好的做法是将danceid放在listitem对象本身中。仅仅是基于项索引的in就让我不寒而栗,特别是当您从数据库中填充列表时,因为当您将一个新项添加到库中的列表中,然后尝试按名称对其进行排序时会发生什么……那么你的索引就变得毫无用处了。
发布于 2012-04-08 04:37:40
替换
int danceIDFromDropDown = danceid;使用
int danceIDFromDropDown = dances.SelectedIndex;这也许能行得通。
https://stackoverflow.com/questions/10058107
复制相似问题