我正在尝试将选定的值写入名为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();
}
答案 0 :(得分:1)
(回应评论和问题编辑......)
与WinForms不同,WebForms“表单”对象不会在内存中持久存在。 Web应用程序本质上是无状态的。因此每个请求都会导致重新实例化目标表单对象,从而调用表单中发生的所有启动内容。
这包括Page_Load
。
因此,每当您单击按钮或执行任何涉及将页面发布回服务器的操作时,Page_Load
(和其他初始化事件)都会再次发生,之前任何事件处理程序或自定义逻辑。
这意味着如果您在Page_Load
中绑定控件,则在尝试使用它们之前,您将重新绑定它们。在WebForms中,对此的标准修复是在绑定时将它们包装在条件中:
if (!IsPostBack)
{
// bind your controls
}
这将在最初加载页面时绑定控件,但在将页面的表单重新提交到页面时(回发)则不会绑定。