0

所以我对 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 已打开。我知道每当我单击其中一个项目时,它都会重定向到“受保护的 void Page_Load(object sender, EventArgs e) {}”,但是当我尝试在没有 AutoPostBack 的情况下执行此操作时,它不会发送我选择的信息。我想使用 AutoPostBack,但我不确定何时或何时不使用它)。

我的问题是当我选择我的项目时,页面将被刷新并且我选择的值将丢失,因此结果为空......

我尝试过使用 if(isPostBack){ },但无法理解 C# 的结构。

我希望有人可以帮助我解决这个问题。提前致谢!亲切的问候, Nkmol

4

2 回答 2

0

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

ASP.NET ViewState 教程

于 2013-06-16T20:32:50.483 回答
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 中时才调用初始化方法 - 即初始页面加载。通过检查该状态而不重新加载 Listbox,我们允许 ViewState 发挥其 [可怕、黑暗、邪恶] 的魔力,并恢复您在 Listbox 控件上所做的选择。

希望有帮助。

于 2013-06-16T20:43:39.570 回答