C# 在下拉列表发生更改时检查下拉列表不会显示正确的值
此winforms代码:C# 在下拉列表发生更改时检查下拉列表不会显示正确的值,c#,asp.net,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
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;
}
在这种情况下,文本框保持为空。为什么?您需要指定DropDownlist的当前值,哪个项目是当前选定的….您需要指定DropDownlist的当前值,哪个项目是当前选定的….当您更改选择时,页面是否回发到服务器 区别不在于C#,而在于应用程序的体系结构。WinForms是在一台机器上运行的单个应用程序。因此,当事件发生时,整个应用程序都知道它。另一方面,WebForms实际上是两个被网络连接分开的东西。有服务器端代码和客户端代码。除非服务器端代码由某种请求调用,否则它不能与客户端代码交互 因此,这并不是因为代码不起作用,而是当您更改
DropDownList
上的选择时,它需要以某种方式将此事件通知服务器。一种方法是将其设置为自动回发:
DropDownList1.AutoPostBack = true;
这将使行为更符合您的预期,因为它会立即通知服务器端代码选择已更改。然而,在web应用程序中,这会导致不希望的用户体验。不断地将页面发回服务器是很难看的。这对性能影响很大
您可以使用一些JavaScript代码在客户端执行逻辑。或者使用JavaScript向服务器端资源(通常是WebForms中的HttpHandler)发出AJAX请求,以执行服务器端处理并检索某种结果。这继续说明了客户端和服务器端之间的分离。在浏览器上下文中运行的JavaScript代码完全了解页面的事件模型,可以立即响应select
元素中的选择更改
最终,你看不到C语言的工作方式有什么不同。您看到的是web应用程序与桌面应用程序工作方式的根本区别。Web应用程序,不管多年来WebForms试图掩盖多少,都是客户机和服务器之间的请求/响应系统。要运行服务器端代码,必须发送请求。更改选择时,页面是否会发回服务器 区别不在于C#,而在于应用程序的体系结构。WinForms是在一台机器上运行的单个应用程序。因此,当事件发生时,整个应用程序都知道它。另一方面,WebForms实际上是两个被网络连接分开的东西。有服务器端代码和客户端代码。除非服务器端代码由某种请求调用,否则它不能与客户端代码交互 因此,这并不是因为代码不起作用,而是当您更改
DropDownList
上的选择时,它需要以某种方式将此事件通知服务器。一种方法是将其设置为自动回发:
DropDownList1.AutoPostBack = true;
这将使行为更符合您的预期,因为它会立即通知服务器端代码选择已更改。然而,在web应用程序中,这会导致不希望的用户体验。不断地将页面发回服务器是很难看的。这对性能影响很大
您可以使用一些JavaScript代码在客户端执行逻辑。或者使用JavaScript向服务器端资源(通常是WebForms中的HttpHandler)发出AJAX请求,以执行服务器端处理并检索某种结果。这继续说明了客户端和服务器端之间的分离。在浏览器上下文中运行的JavaScript代码完全了解页面的事件模型,可以立即响应select
元素中的选择更改
最终,你看不到C语言的工作方式有什么不同。您看到的是web应用程序与桌面应用程序工作方式的根本区别。Web应用程序,不管多年来WebForms试图掩盖多少,都是客户机和服务器之间的请求/响应系统。要运行服务器端代码,必须发送请求。在asp.net上,下拉列表将列表保存在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;
}
如果已禁用页面或此控件的viewstate,则始终可以使用.Form
将此控件的内容定向回发
Request.Form[DropDownList1.UniqueID]
在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;
}
如果已禁用页面或此控件的viewstate,则始终可以使用.Form
将此控件的内容定向回发
Request.Form[DropDownList1.UniqueID]
不应该
TextBox1.Text
是TextBox1.Text
?C#区分大小写。@蒂姆大概是将他的TextBox
变量命名为TextBox1
,而不是TextBox1
。否则它不会编译,而不是编译和不运行。您能为第二个代码段包含相关的标记吗?Web应用程序需要另一个HTTP请求(通常通过Web表单中的回发),服务器代码才能响应用户交互。是C#(桌面)文本框1中的?@Tim是小写的“t”。在C#(对于ASP.NET)Tex中