ASP.NET DropDownList.SelectedValue在具有动态数据绑定的PostBack上没有值

时间:2010-06-21 20:39:41

标签: asp.net viewstate

设置
使用:Visual Web Developer 2010 Express。
语言:C#。
目标框架:.NET Framework 4.
ViewState:我在Web.Config中禁用了ViewState - 即<configuration><system.web><pages enableViewState="false" />

问题
我有一个带有标准DropDownList控件的ASP.NET页面 我在DropDownList上设置了EnableViewState =“true”和ViewStateMode =“Enabled” 我在代码隐藏中使用数据绑定来填充控件(这很好) 数据绑定发生在Page_PreRender的调用中,无论是初始加载还是回发 在来自Button Click事件处理程序的调用中(即在Page_PreRender之前),我试图从DropDownList的SelectedValue属性中读取。
问题是:我收到的只是一个零长度字符串(“”)值,对象的检查表明控件包含值。

解决方案
确保在&lt;%@ Page%&gt;中设置EnableViewState =“true”包含DropDownList的页面上的指令。

或者,您可以为DropDownList创建一个扩展方法,该方法从HttpRequest集合中读取值。
e.g。

public static string GetSelectedValue(this System.Web.UI.WebControls.DropDownList listBox)
{
  return HttpContext.Current.Request[listBox.ClientID];
}

1 个答案:

答案 0 :(得分:0)

你是对的(除了Jason指出的UniqueID)

但为什么要全局禁用viewstate?它是asp.net的一大特权,也是页面中许多功能所必需的。对于大多数控件来说并没有那么糟糕,因此没有理由担心它。

你想要关注那些产生大量标记的控件(例如网格),并且肯定会禁用它们。

只需打开Page指令中的Trace,您就会看到控制树上每个节点使用了多少viewstate。