然后,尝试读取(假设控件已经在最后一个转储中填充到屏幕,并且选择了一个值):
MyDDL.SelectedValue将产生“”
这是因为禁用的viewstate:
但我的问题是在更高的层次上:
>如果这一切都是关于一个表单值(我仍然可以从Request.Form [MyDDL.UniqueID]获得)) – 我们在谈论一个不需要任何东西来保存它的值的输入.
>为什么名为(SelectedValue)的DropDownList属性依赖于ViewState?
附: TextBox onchangeevent确实依赖于viewstate,虽然控件是一个输入(不需要viewstate) – 它保存文本的值,然后在postback时比较它.但是当您设置onchange事件(和autopostback)时,它只依赖于viewstate,
解决方法
首先,我总是推荐这个这个真棒的文章:TRULY Understanding ViewState.
SelectedValue不需要ViewState.看看DropDownList继承的ListControl的代码,我们看到代码:
public virtual string SelectedValue { get { int selectedindex = this.Selectedindex; if (selectedindex >= 0) return this.Items[selectedindex].Value; else return string.Empty; }
从此代码中删除的重要事项是必须填充Items列表以获取SelectedValue.
如果您使用ViewState,则Items集合将从ViewState中持久化到/加载,这允许SelectedValue属性在不重新绑定控件的情况下工作.
原文地址:https://www.jb51.cc/aspnet/245984.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。