所以我对C#并不熟悉,我正在努力学习基础知识,但对我来说仍然含糊不清。 我正在尝试这样做:当我在列表框中选择一个项目时,它将获得所选项目值并将其放入文本框中(这仅用于测试何时我想使用MSSSQL的值)。
所以这是我的标记(.aspx代码):
<asp:ListBox ID="Listbox1" runat="server" AutoPostBack="True"
onselectedindexchanged="lstArtiesten_SelectedIndexChanged"></asp:ListBox>
这是我的代码隐藏(.aspx.cs代码):
protected void Listbox1_SelectedIndexChanged(object sender, EventArgs e)
{
txtArtName.Text = Listbox1.SelectedItem.Text;
}
正如您所见,AutoPostBack已启用。我知道每当我点击其中一个项目时,它会被重定向到“protected void Page_Load(object sender,EventArgs e){}”,但是当我尝试不使用AutoPostBack时,它将不会发送我选择的信息。 我想使用AutoPostBack,但我不确定何时或何时不使用它。)
我的问题是,当我选择我的项目时,页面将被刷新,我选择的值将会丢失,因此结果为空...
我尝试使用if(isPostBack){},但未能理解C#的结构。
我希望有人可以帮助我。 提前致谢! 亲切的问候,Nkmol
答案 0 :(得分:0)
您熟悉ViewState的概念吗?这是允许ASP.NET控件“记住”其值的原因。我建议您访问本教程,然后,如果您仍有问题,请询问/重新提问。
答案 1 :(得分:0)
道歉,如果我有错误的问题,但从它的声音,发生的是当你更改列表框中的值时,这会导致回发,而这反过来又运行您用来填充列表框的代码。 (我假设您在代码隐藏中执行此操作,因为我在标记中没有看到指定列表中的项目的任何内容)
所以给这个标记:
<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;
}
请注意,如果我们不在Postback -i.e初始页面加载,那么只调用initialise方法。 通过检查该状态而不重新加载Listbox,我们允许ViewState使用它的[可怕的,黑暗的,邪恶的]魔法并恢复你在Listbox控件上所做的选择。
希望有所帮助。