SelectedValue& SelectedItem来自下拉列表

时间:2015-10-15 12:36:33

标签: c# html asp.net

我正在尝试将选定的值写入名为this.txtTextSelected.Text = text;this.txtValueSelected.Text = value;的两个单独的文本框

我的问题是这些值没有写入两个文本框,当选择了一个选项时,我的页面刷新并且实际上并没有存储所选的值,这让我认为是 1)下拉列表的HTML不正确 2)我为某些东西添加了不需要的语法 但是,我正在摸不着真正的交易。

这是下拉列表的HTML

<asp:DropDownList ID="dropdownlist1" CssClass="DropDownLists" 
runat="server" Width="90px"
AutoPostBack="true" 
OnSelectedIndexChanged="dropdownlist1_SelectedIndexChanged">
</asp:DropDownList>



这是我的页面背后的C#代码

protected void dropdownlist1_SelectedIndexChanged(object sender, EventArgs e)
{
    string value = dropdownlist1.SelectedValue;
    string text = dropdownlist1.SelectedItem.Text;
    this.txtValueSelected.Text = value;
    this.txtTextSelected.Text = text;
}



修改 这会解决我的问题(基于下面的@David评论)

if (!IsPostBack)
{
    BindDropDownList();
}

1 个答案:

答案 0 :(得分:1)

(回应评论和问题编辑......)

与WinForms不同,WebForms“表单”对象不会在内存中持久存在。 Web应用程序本质上是无状态的。因此每个请求都会导致重新实例化目标表单对象,从而调用表单中发生的所有启动内容。

这包括Page_Load

因此,每当您单击按钮或执行任何涉及将页面发布回服务器的操作时,Page_Load(和其他初始化事件)都会再次发生,之前任何事件处理程序或自定义逻辑。

这意味着如果您在Page_Load中绑定控件,则在尝试使用它们之前,您将重新绑定它们。在WebForms中,对此的标准修复是在绑定时将它们包装在条件中:

if (!IsPostBack)
{
    // bind your controls
}

这将在最初加载页面时绑定控件,但在将页面的表单重新提交到页面时(回发)则不会绑定。