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单击按钮时出现异常。
答案 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