asp.net:获取DropDownList的SelectedItem并保留列表项

时间:2008-10-13 18:29:11

标签: asp.net .net drop-down-menu viewstate selecteditem

这是问题..

我的小页面有标签,下拉列表和提交按钮。

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

感谢您的回复。

3 个答案:

答案 0 :(得分:4)

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

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

我认为这是一个错误。如果在页面级别启用EnableViewState =“false”,并且在控件级别启用EnableViewState =“true”,则控件不会保留ViewState状态。

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

答案 1 :(得分:2)

这对我有用

 protected void Page_Load(object sender, EventArgs e)
{
            if(!IsPostBack)
            FillApplicationDropDown();
}

答案 2 :(得分:0)

在虚拟目录中可能正在缓存页面。

尝试将此添加到Page_Load

Response.Cache.SetCacheability(HttpCacheability.NoCache)

我认为可以使用配置文件将缓存应用于目录。所以可能是差异。