【发布时间】:2009-08-23 16:04:28
【问题描述】:
如果将 asp.net DropDownList 设置为 EnableViewState=false,则 DropDownList.SelectedItem 返回 null。
那么在保持 EnableViewState=false 的同时,我可以使用什么技术来获取该 DropDownList 的 SelectedItem?
【问题讨论】:
标签: asp.net drop-down-menu viewstate
如果将 asp.net DropDownList 设置为 EnableViewState=false,则 DropDownList.SelectedItem 返回 null。
那么在保持 EnableViewState=false 的同时,我可以使用什么技术来获取该 DropDownList 的 SelectedItem?
【问题讨论】:
标签: asp.net drop-down-menu viewstate
Request.Form[yourDropDownList.UniqueID]
UniqueID 返回“ctl00$ContentMain$ddlCountry”,其中 ClientID 返回“ctl00_ContentMain_ddlCountry”
UniqueID 被插入到用于回发表单名称的 HTML 表单名称中。
【讨论】:
this.Request.Form[this.List.ClientID];
【讨论】:
我的猜测是问题在于您在代码隐藏文件中手动对下拉列表进行数据绑定。将数据绑定从 Page_Load() 移动到 Page_Init() 可能会有所帮助。
但在我看来,更好的解决方案是使用ObjectDataSource 来填写 DropDownList 的值。这样您就可以确定在页面生命周期中的正确时间加载值。
【讨论】:
string selectedValue = Request.Form["MyDropDownList"];
【讨论】:
这是我使用 VS2010 的解决方案。 1. 将 EnableViewState 设置为 false。 2. 将下拉列表框绑定到一个sqldataadapter。
之前: 将 EnableViewState 设置为 false 后,我必须在每次回发时重新加载列表框。这行得通。然而,第一次从列表中选择一个值时,SelectedIndexChanged 事件被触发,但 selectecitem.Value 没有改变(它保持在“0”)。第二次从列表中选择一个值时,selectecitem.Value 是正确的。
【讨论】: