c# / asp.net -使用AutoPostBack和OnIndexChange获取项目值
本文关键字:OnIndexChange 获取 项目 AutoPostBack 使用 asp net | 更新日期: 2023-09-27 18:18:50
所以我对c#不是很熟悉,我正在努力学习基础知识,但对我来说仍然很模糊。我要做的是:当我在列表框中选择一个项目时,它会得到所选项目的值并将其放入文本框(这只是为了测试,当我想使用MSSSQL的值时)。
这是我的标记(。aspx代码):<asp:ListBox ID="Listbox1" runat="server" AutoPostBack="True"
onselectedindexchanged="lstArtiesten_SelectedIndexChanged"></asp:ListBox>
protected void Listbox1_SelectedIndexChanged(object sender, EventArgs e)
{
txtArtName.Text = Listbox1.SelectedItem.Text;
}
正如你所看到的,AutoPostBack是开启的。我知道每当我点击其中一个项目它被重定向到"受保护的无效Page_Load(对象发送者,EventArgs e){}",但是当我尝试在没有AutoPostBack的情况下这样做时,它不会发送我选择的信息。我想使用AutoPostBack,但我不确定何时或何时不使用它)。
我的问题是,当我选择我的项目页面将刷新,我选择的值将丢失,因此一个空的结果…
我试过使用if(isPostBack){},但未能理解c#的结构。
我希望有人能帮我做这件事。提前感谢!尊敬的Nkmol抱歉,如果我误解了这个问题,但是从它的声音来看,发生的事情是,当您更改Listbox中的值时,这会导致回发,这反过来又运行您最初用于填充Listbox的代码。(我假设你在代码后面这样做,因为我在你的标记中没有看到任何东西,指定列表中的项目)
给定这个标记:
<asp:ListBox ID="Listbox1" runat="server" AutoPostBack="True"
onselectedindexchanged="lstArtiesten_SelectedIndexChanged"></asp:ListBox>
<asp:TextBox runat="server" id="txtArtName"></asp:TextBox>
你的代码应该看起来像这样:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//only call initialise during initial page load.
initialise();
}
}
protected void initialise()
{
//add some items to the list
Listbox1.Items.Add("Something1");
Listbox1.Items.Add("Something2");
Listbox1.Items.Add("Something3");
Listbox1.Items.Add("Something4");
Listbox1.SelectedIndex = 0; //select the first item in the list, or whatever
}
protected void lstArtiesten_SelectedIndexChanged(object sender, EventArgs e)
{
txtArtName.Text = Listbox1.SelectedItem.Text;
}
注意,initialize方法只有在Postback -i中没有调用时才会被调用。E初始页面加载。通过检查状态和不重新加载列表框,我们允许ViewState工作它的[可怕的,黑暗的,邪恶的]魔法,并恢复你在列表框控件上所做的选择。
希望对你有帮助。
您熟悉ViewState的概念吗?这就是允许ASP。. NET控件来"记住"它们的值。我建议你访问这个教程,然后,如果你仍然有问题,然后问/重新问你的问题。
ASP。. NET ViewState教程