<asp:Dropdownlist/>禁用viewstate以后

public partial class _Default : System.Web.UI.Page
    {
        protected override void OnPreInit(EventArgs e)
        {

List<string> list = new List<string>();
            list.Add("1");
            list.Add("2");
            list.Add("3");
            list.Add("4");
            list.Add("5");
            list.Add("6");
            list.Add("7");
            list.Add("8");
            list.Add("9");
            list.Add("0");
            drop1.DataSource = list;
            drop1.DataBind();

//int count = drop1.Items.Count;
            base.OnPreInit(e);
            base.OnPreInit(e);

}

protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
        }

//protected override void LoadViewState(object savedState)
        //{
        //    base.LoadViewState(savedState);
        //}

//ProcessPostData()

protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
        }

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //List<string> list = new List<string>();
                //list.Add("1");
                //list.Add("2");
                //list.Add("3");
                //list.Add("4");
                //list.Add("5");
                //list.Add("6");
                //list.Add("7");
                //list.Add("8");
                //list.Add("9");
                //list.Add("0");
                //drop1.DataSource = list;
                //drop1.DataBind();
            }
            else
            {
                string txt = drop1.SelectedValue;
            }
        }

protected void drop1_SelectedIndexChanged(object sender, EventArgs e)
        {

}
    }问题:1。
服务端代码中绑定下拉框的数据源。为什么禁用viewstate以后drop1.SelectedValue的到得值空的?

答:回发得到的回发的时候,void LoadViewState(object savedState)在这里有一个分析viewstate的过程,过程1,把viewstate解析给drop1的

datasoure属性.过程2,然后drop1.selectedValue = request.form["drp1"].这样我们就行通过drop1.selectedValue获取到我们选中的值了


可是当我们把viewstate禁用掉以后发现,1过程已经不能把viewstate付给datasource属性了,这样drop1一个值也没有,然后2步骤将我们选中的

值赋给一个空的drop,drop根本找不到与其相应的索引,由于它是空的。这样我们再用drop1.selectedValue的时候它是一个空值。

问题:2
若下拉框的数据源绑定不是在服务端编码实现的,而是在服务端通过在页面的标签里面进行了赋值。列如:
<asp:DropDownList runat="server" ID="drop1" AutoPostBack="true" EnableViewState="false"
            OnSelectedIndexChanged="drop1_SelectedIndexChanged">
            <asp:ListItem Text="春" Value="1">
            </asp:ListItem>
            <asp:ListItem Text="夏" Value="2">
            </asp:ListItem>
        </asp:DropDownList>
这个时候我们禁用viewstate的时候发现drop1.SelectedValue可以获取到client选中的值.这个时候又是为什么?

答:在在服务端通过在页面的标签里面进行赋值,事实上在请求到达void OnPreInit(EventArgs e)这种方法的时候,asp.net有一个
生成控件树的过程,然后对.aspx页面中的每一个控件都进行了初始化。也就是说drp1的datasource属性这个时候已经有值了,
假设不相信,我们能够初次请求的时候,在void OnPreInit(EventArgs e)这个最早的阶段看下drop1的数量.代码例如以下;
protected override void OnPreInit(EventArgs e)
        {

int count = drop1.Items.Count;//显示2
            base.OnPreInit(e);

}
回发的时候,我们依照问题1中的解说的void LoadViewState(object savedState)对SelectedValue赋值的事情,这个时候
datasource属性不是空的,当然就能够把client的返回值,赋给selectedValue了。
(另外一个大家须要知道的是,
1.服务端的.aspx页面进行初始化,viewtate是不会被记录的,所以我们查看client的viewtate事实上也是没有drop中所包括的信息的.
2.假设我们对下拉框的赋值是通过client进行的,也就是Js.那我们在回发的时候发现SelectedValue的值也是空的,事实上我们也能够通过问题1

能够来解释。client赋值这里就不涉及到一个装载和解析viewstate的问题。
3.在问题一中过程2.drop1.selectedValue = request.form["drp1"]。说明client选中的值是不通过viewstate传递的,而是通过表单

Request.Form["drop1"].ToString()能够获取的到的。凡是继承了IPostBackDataHandler都是通过表单获取client提交的值的。所以无论是否

禁用viewstate都能获取到client提交的值.)

最新文章

  1. iOS,视图相关
  2. LZW压缩算法
  3. 论文笔记之:Fully Convolutional Attention Localization Networks: Efficient Attention Localization for Fine-Grained Recognition
  4. 父&lt;IFRAME&gt;获取子页属性以及子页中&lt;IFRAME&gt;的方法
  5. Linux 驱动程序/内核模块/ko文件
  6. (hdu)1042 N! 大数相乘
  7. Delphi 我常用的几个下载源码的站点
  8. Mysql 笔记:
  9. 动态代理的两种实现方式(JDK/Cglib)
  10. Python配置文件实现
  11. 线程同步的实现方式(volatile、synchronized、CountDownLatch)
  12. Go基础系列:函数(2)——回调函数和闭包
  13. C++使用libcurl
  14. Window应急响应(五):ARP病毒
  15. ERP项目实施记录03
  16. OpenStack 存储服务 Cinder存储节点部署NFS(十七)
  17. 安卓开发环境配置及HelloWorld
  18. 利用BurpSuite实现半自动化盲注
  19. JTSL/EL Expression学习
  20. 集群运维ansible

热门文章

  1. ASP.NET MVC 5 学习教程:Edit方法和Edit视图详解
  2. php三元运算
  3. activity入门2
  4. 自定义的Server
  5. 【译】在Asp.Net中操作PDF – iTextSharp - 使用链接和书签
  6. 使用数组实现队列----《数据结构与算法分析---C语言描述》
  7. linux: Ubuntu安装samba的问题
  8. Eclipse用法和技巧二十七:定义自己的快速联想词
  9. jquery 中获取URL参数的方法
  10. SpringMVC 返回字符串