2

问题来了。。

我有一个带有标签、下拉列表和提交按钮的小页面。

<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 对吗?

感谢回复。

4

3 回答 3

4

听起来您可能在页面级别禁用了 EnableViewState。与其他响应相反,如果启用了 ViewState,则无需在 PostBack 上重新填充列表。

尝试在页眉中添加 EnableViewState="true" 属性。

我认为这是一个错误。如果 EnableViewState="false" 在页面级别,EnableViewState="true" 在控件级别,则不会像应有的那样为控件保留 ViewState。

如果您只想为某些控件启用 ViewState,请在页面级别设置 EnableViewState="true",然后为您不想为其保留 ViewState 的控件设置 EnableViewState="false"。倒退,我知道,但这是唯一的解决方法。

于 2008-10-13T19:06:36.717 回答
2

这对我有用

 protected void Page_Load(object sender, EventArgs e)
{
            if(!IsPostBack)
            FillApplicationDropDown();
}
于 2012-10-30T06:49:54.397 回答
0

也许页面在虚拟目录中被缓存。

尝试将此添加到 Page_Load

Response.Cache.SetCacheability(HttpCacheability.NoCache)

我认为可以使用配置文件将缓存应用于目录。所以可能这就是区别。

于 2008-10-13T18:32:29.330 回答