无法获得组合框以返回所选项目

时间:2018-02-10 16:57:51

标签: c# asp.net .net combobox

Dotnet,C#,VS2013 我有一个方法来检索组合框中的选定项目(CBSpecies)。单击按钮时会调用该方法。我的问题是无论我选择什么,方法找到的项目总是第一个(当我填充组合框时默认设置)。我有一个控制台应用程序使用完全相同的方法,它工作正常。

private void GetSelectedSpecies()
    {
        //EurostatSpeciesName = "Fish and Chips";
        //EurostatSpeciesName = CBSpecies.SelectedIndex.ToString();
        //return;
        // CBSpecies.SelectedIndex = 3;
        String MySpecies = CBSpecies.SelectedItem.ToString();
        for (int i = 0; i < MaxSpecies; i++)
            if (SpeciesArray[i].SpeciesName == MySpecies)
            {
                EurostatSpecies = SpeciesArray[i].SpeciesCode;
                EurostatSpeciesName = SpeciesArray[i].SpeciesName;
                break;
            }           
    }

添加了以下注释:我认为问题在于我在Page_Load方法中填充并初始化组合框,因此当按钮执行回发时,它会重置所有内容,因为它会重新加载页面。这不会发生在控制台版本中。我尝试使用:if(!Page.IsPostBack)作为条件,然后应用程序抛出null单击按钮时出现异常。

3 个答案:

答案 0 :(得分:0)

尝试.SelectedNode,看看是否有效。

答案 1 :(得分:0)

使用这篇文章中的建议解决:

https://www.telerik.com/forums/selectedvalue-lost-on-postback-in-dynamically-added-user-controls

问题中提到的方法已移至:

protected void Page_Init(object sender, EventArgs e)
    {}

Page_Init不是自动创建的,因此必须手动添加。一旦组合框检查方法放在那里,选择就是持久的。

答案 2 :(得分:0)

你的组合框是所谓的dynamic control。即你在代码隐藏而不是标记中构建它。 必须在视图状态之前初始化动态控件,以便将它们插入ASP.NET页面生命周期事件。

正如您所知,Page_Init是初始化此类控件的正确位置。您可以找到有关该主题的更多信息here