当下拉列表发生更改时,检查下拉列表不会显示正确的值

  • 本文关键字:下拉列表 显示 c# asp.net
  • 更新时间 :
  • 英文 :


此winforms代码:

private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("Item 1");
comboBox1.Items.Add("Item 2");
comboBox1.Items.Add("Item 3");
comboBox1.Items.Add("Item 4");
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox1.Text = comboBox1.Text;
}

工作非常完美。我选择一个项目,文本框显示组合框的相同内容

现在ASP也是如此。NET:

protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.Items.Add("Item 1");
DropDownList1.Items.Add("Item 2");
DropDownList1.Items.Add("Item 3");
DropDownList1.Items.Add("Item 4");
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
TextBox1.Text = DropDownList1.Text;
}

在这种情况下,文本框保持为空。为什么?

当您更改选择时,页面会返回到服务器吗?

区别不在于C#,而在于应用程序的体系结构。WinForms是在一台机器上运行的单个应用程序。因此,当一个事件发生时,整个应用程序都知道它。另一方面,WebForms实际上是由网络连接分隔的两个东西。有服务器端代码和客户端代码。除非服务器端代码被某种请求调用,否则它无法与客户端代码交互。

因此,这并不是说代码不起作用,而是当您更改DropDownList上的选择时,它需要以某种方式通知服务器此事件。一种方法是将其设置为自动回发:

DropDownList1.AutoPostBack = true;

这将使行为与您期望的更加一致,因为它会立即通知服务器端代码选择已更改但是,在web应用程序中,这会导致不理想的用户体验。不断地将页面发布回服务器是很难看的。这对表现造成了很大的伤害。

您可以使用一些JavaScript代码来执行您的逻辑客户端。或者,再次使用JavaScript向服务器端资源(WebForms中的HttpHandlers通常)发出AJAX请求,以执行服务器端处理并检索某种结果。这继续体现了客户端和服务器端之间的分离。在浏览器上下文中运行的JavaScript代码完全了解页面的事件模型,并且可以立即响应select元素中的选择更改。

最终,你看不到C#语言的工作方式有什么不同。您所看到的是web应用程序与桌面应用程序工作方式的根本区别。Web应用程序是客户端和服务器之间的请求/响应系统,无论WebForms多年来试图掩盖这一点的程度如何。为了运行服务器端代码,必须发送一个请求。

您需要指定DropDownlist的当前值,哪个Item是当前选定的。。。。

在asp.net上,dropdownlist会将列表保存在viewstate中,您不能在发布时再次添加它们,否则您将重置选择。要使其按预期工作,请将IsPostBack检查添加为:

protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
DropDownList1.Items.Add("Item 1");
DropDownList1.Items.Add("Item 2");
DropDownList1.Items.Add("Item 3");
DropDownList1.Items.Add("Item 4");
}
}

此外,选择来自SelectedValue

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
TextBox1.Text = DropDownList1.SelectedValue;
}

如果您禁用了页面或该控件的视图状态,您可以始终使用.Form作为来指示该控件的发布内容

Request.Form[DropDownList1.UniqueID]

最新更新