这是我的第一个网页,我似乎找不到从下拉列表中获取所选索引的正确方法。在用户按下提交按钮之前,我不需要所选的索引。我一直在测试我在这个主题上发现的一切,但没有任何效果。
我不希望在进行选择时重置下拉框,如果我使用postback = true或任何选定的索引更改事件会发生这种情况。并且,我仍然得到0的索引。
当我测试时,所选索引始终为零。
这在页面加载时运行:
ddlBudgetLineItem.DataSource = budget.BudgetLineItems;
ddlBudgetLineItem.DataTextField = "Name";
ddlBudgetLineItem.DataValueField = "BudgetLineItemID";
ddlBudgetLineItem.DataBind();
这是下拉列表:
<asp:DropDownList ID="ddlBudgetLineItem" runat="server">
</asp:DropDownList>
以下是需要索引的代码:
protected void submitPayment()
{
string amountValue = txtAmount.Text.ToString();
float amount = float.Parse(amountValue);
Payment payment = new Payment()
{
Amount = amount,
Payee = txtPayee.Text,
BudgetLineItem = budget.BudgetLineItems[ddlBudgetLineItem.SelectedIndex],
Memo = txtMemo.Text,
PaymentDate = DateTime.Parse(txtPaymentDate.Text),
ExtraUserInfo = info
};
provider.AddPayment(payment);
}
感谢任何帮助。
答案 0 :(得分:1)
这似乎是一个生命周期问题,这种情况正在发生,因为每次(在回发与否)上加载页面,你的下拉列表都会被重建(由ddlBudgetLineItem.DataBind()引起),在回发中得出结论你的ddl将永远得到index = 0。
你怎么解决这个问题:
1:覆盖页面数据绑定方法并在调用base.databind()之前放入代码; (在方法内)
2:在你的加载事件中,你只需要调用数据绑定(如果不是回发),它会阻止每次加载页面时重建对象状态。(导致你丢失信息)。
3:看一下页面生命周期,它将帮助您预防此类未来的问题。