从提交的下拉列表中获取selectedIndex

时间:2011-04-02 13:41:40

标签: asp.net drop-down-menu

这是我的第一个网页,我似乎找不到从下拉列表中获取所选索引的正确方法。在用户按下提交按钮之前,我不需要所选的索引。我一直在测试我在这个主题上发现的一切,但没有任何效果。

我不希望在进行选择时重置下拉框,如果我使用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);
    }

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这似乎是一个生命周期问题,这种情况正在发生,因为每次(在回发与否)上加载页面,你的下拉列表都会被重建(由ddlBudgetLineItem.DataBind()引起),在回发中得出结论你的ddl将永远得到index = 0。

你怎么解决这个问题:

1:覆盖页面数据绑定方法并在调用base.databind()之前放入代码; (在方法内)

2:在你的加载事件中,你只需要调用数据绑定(如果不是回发),它会阻止每次加载页面时重建对象状态。(导致你丢失信息)。

3:看一下页面生命周期,它将帮助您预防此类未来的问题。