设置
使用: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];
}
答案 0 :(得分:0)
你是对的(除了Jason指出的UniqueID)
但为什么要全局禁用viewstate?它是asp.net的一大特权,也是页面中许多功能所必需的。对于大多数控件来说并没有那么糟糕,因此没有理由担心它。
你想要关注那些产生大量标记的控件(例如网格),并且肯定会禁用它们。
只需打开Page指令中的Trace,您就会看到控制树上每个节点使用了多少viewstate。