问题来了。。
我有一个带有标签、下拉列表和提交按钮的小页面。
<div>
<asp:label id="Message" runat="server"/>
<br />
Which city do you wish to look at on hotels for?<br /><br />
<asp:dropdownlist id="Dropdownlist1" runat="server" EnableViewState="true">
</asp:dropdownlist>
<br /><br /><br /><br />
<input type="Submit" />
</div>
在表单加载时,我将项目插入下拉列表,然后单击按钮,我将显示下拉列表中项目的计数。这是代码。
if (Page.IsPostBack)
{
Message.Text = "You have selected " + Dropdownlist1.Items.Count.ToString();
}
else
{
Message.Text = "You have selected " + Dropdownlist1.Items.Count.ToString();
Dropdownlist1.Items.Add("Madrid");
Dropdownlist1.Items.Add("Chennai");
Dropdownlist1.Items.Add("New York");
}
这是有趣的部分。如果我直接从 IDE 运行它,它工作得非常好。我第一次得到计数为 0,当我按下提交按钮时得到 3。我需要在现有的虚拟目录上运行这个小代码。如果我在该虚拟目录中运行相同的 aspx 页面,我会在第一次加载时得到计数 0。当我单击提交时,我得到计数为 0,并且我在下拉列表中看不到任何项目,它正在被清除。我已将 viewstate 设置为 true,以便我记住插入的内容。
我不确定当我从 IDE 运行它和从另一个虚拟目录运行它时有什么区别。我对 Asp.Net 还很陌生,所以我在这里介绍了所有选项,以便了解下拉列表的工作原理。我在这里缺少配置吗?
顺便说一句,仅供参考,当我将 DropDownList 放在向导控件中时,我遇到了同样的问题。当从 IDE 运行时,它工作正常,但是当我从虚拟目录运行时,它没有获得选定的值,也没有记住下拉列表中的项目。
对此的任何帮助将不胜感激。
对不起:(,还有几个问题
根据您的代码,该列表仅在不是 PostBack 时才会被填充。因此,当您单击按钮时,列表将为空。如果您动态填充列表,则不会记住这些项目。您必须在每个 Page_load 中添加。视图状态只会记住选择了哪个项目。
当页面直接从 IDE 执行时,它如何记住这些项目,而不记得我何时从虚拟目录运行。是否有我可能需要设置的视图状态才能使其正常工作。缓存设置也没有太大的运气。我启用了跟踪信息,又是一件有趣的事情:|,直接从 IDE 而不是从虚拟目录执行时会发生跟踪。再次提问,子目录的 web.config 应该覆盖父 web.config 对吗?
感谢回复。