Asp.net 在提交时从下拉列表中获取selectedIndex

Asp.net 在提交时从下拉列表中获取selectedIndex,asp.net,drop-down-menu,Asp.net,Drop Down Menu,这是我的第一个网页,我似乎找不到从下拉列表中获取所选索引的正确方法。在用户按下提交按钮之前,我不需要所选索引。我一直在测试我在这个问题上发现的所有东西,但都不起作用 我不希望在进行选择时重置下拉框,如果使用postback=true或任何选定的索引更改事件,就会发生这种情况。我仍然得到一个0的索引 测试时,所选索引始终为零 这将在页面加载时运行: ddlBudgetLineItem.DataSource = budget.BudgetLineItems; ddlBudgetLineItem.

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

我不希望在进行选择时重置下拉框,如果使用postback=true或任何选定的索引更改事件,就会发生这种情况。我仍然得到一个0的索引

测试时,所选索引始终为零

这将在页面加载时运行:

 ddlBudgetLineItem.DataSource = budget.BudgetLineItems;
 ddlBudgetLineItem.DataTextField = "Name";
 ddlBudgetLineItem.DataValueField = "BudgetLineItemID";
 ddlBudgetLineItem.DataBind();
这是下拉列表:

<asp:DropDownList ID="ddlBudgetLineItem" runat="server">
            </asp:DropDownList>

感谢您的帮助。

这似乎是一个生命周期问题,这是因为每次(无论是否回发)加载页面时,都会重建下拉列表(由ddlBudgetLineItem.DataBind()引起),从而得出结论,在回发时,ddl将永远获得index=0

如何解决这个问题:

1:重写page databind方法,并将代码放在调用base.databind()之前;(方法内部)

2:在加载事件中,您只需调用databind(如果不是postback),它会阻止在每次加载页面时重建对象状态。(导致信息丢失的原因)


3:查看页面生命周期—它将帮助您防止将来出现类似问题。

对不起,下拉列表的代码已被删除:但我似乎无法正确执行此操作。下面是我根据您的建议更新代码的下拉列表,这就像一个魅力:if(!IsPostBack){ddlbughtlineitem.DataBind();}这些注释框如何工作对我来说是另一个谜,但我想说声谢谢,我将研究页面生命周期以防止将来出现问题。
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);
    }