C#/ ASP .NET - 使用AutoPostBack和OnIndexChange获取Item值

时间:2013-06-16 19:53:53

标签: c# asp.net null postback selectedindexchanged

所以我对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

2 个答案:

答案 0 :(得分:0)

您熟悉ViewState的概念吗?这是允许ASP.NET控件“记住”其值的原因。我建议您访问本教程,然后,如果您仍有问题,请询问/重新提问。

ASP.NET ViewState Tutorial

答案 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控件上所做的选择。

希望有所帮助。