【问题标题】:Get selectedIndex from a dropdown list on submit从提交的下拉列表中获取 selectedIndex
【发布时间】:2011-04-02 13:41:40
【问题描述】:

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

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

感谢任何帮助。

【问题讨论】:

  • 对不起,下拉的代码被省略了:
  • 而且,我似乎做不到这一点。这是下拉列表

标签: asp.net drop-down-menu


【解决方案1】:

这似乎是一个生命周期问题,这是因为每次(在回发或不回发)页面加载时,您的下拉菜单都会重建(由 ddlBudgetLineItem.DataBind() 引起),在回发您的 ddl 时得出结论将永远得到 index=0。

你怎么解决这个问题:

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

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

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

【讨论】:

  • 我根据你的建议更新了我的代码,这就像一个魅力: if (!IsPostBack) { ddlBudgetLineItem.DataBind(); }
  • 这些评论框的工作原理对我来说是另一个谜,但我想说谢谢你,我会研究页面生命周期以防止将来出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多