<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提交的值.)

禁用viewstate的更多相关文章

  1. 15.禁用ViewState

    默认情况下ASP.net是启用ViewState的,这样在页面中会生成冗长的隐藏字段,ViewState对于需要PostBack处理的页面才可能有用,对于不需要交互的页面则完全没有必要用ViewSta ...

  2. web.congfig 禁用 ViewState Session

    <!--禁用 ViewState Session--> <pages enableViewState="false" enableSessionState=&qu ...

  3. ASP.NET - 禁用ViewState

    默认情况下,ViewState是被启用的,比如提交表单后,表单中输入的值会自动保留.但是如果不需要保留,也可以将其禁用,这样可以节省资源.   下面3种方式就可以分别禁用某一个控件.某一个页面和整个应 ...

  4. 什么是viewstate,能否禁用?是否所用控件都可以禁用

    viewstate用于在两次postback之间保持状态的一种机制禁用viewstate将不能在回发之间保存状态 当控件状态无关使用viewstate将造成性能问题时需要禁用viewstate Vie ...

  5. Webform Application传值 ViewState

    Application:所有的会话共享一个Application空间,任何一个人改变Application的内容,其他人都会发现被改变了.Application中的内容不会被自动释放 存放位置:服务端 ...

  6. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

    开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...

  7. Webform Application、ViewState

    Application(全局对象) Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApplication类对象Application被自动 ...

  8. 让VIEWSTATE从页面中完全消失(小技巧)

      VIEWSTATE是个好东西,是asp.net的一大创举,给web开发带来了极大的便利,然后这种便利是一种双刃剑,尤其是在前台页面,大多数前台页面都是用来展示列表数据,和用户交互的地方现在大都采用 ...

  9. 教你50招提升ASP.NET性能(二十):7条便利的ViewState技巧

    (32)Seven handy ViewState tips 招数32: 7条便利的ViewState技巧 Every time I have to deal with a classic ASP.N ...

随机推荐

  1. Centos6.5搭建bugzilla

    一.安装httpd. mod_ssl. mysql-server . mysql .php-mysql . gcc . perl* . mod-perl-devel [root@localhost ~ ...

  2. make报错:"/usr/bin/ld: cannot find -lXXX"

    在编译php时报错如下: # make ... /usr/bin/ld: cannot find -lltdlcollect2: ld returned 1 exit statusmake: *** ...

  3. Qt Charts的简单安装与使用

    http://blog.qt.io/blog/2016/01/18/qt-charts-2-1-0-release/ 下载地址: https://codereview.qt-project.org/# ...

  4. NOI08冬令营 数据结构的提炼与压缩

    无聊随手翻,翻到了一个这样的好东西--据结构的提炼与压缩: 为了防止以后忘记,这里把论文里的题目都纪录一下吧. 1.二维结构的化简 问题一:ural 1568 Train car sorting 定义 ...

  5. Flex中怎么给表格中的滚动栏定位

    1.问题背景 假设表格中的字段过多,会出现滚动栏,在将滚动栏滚到一定的位置时,又一次刷新表格.滚动栏会回到原处,原来查看的字段还得继续滚动,才干查看到. 2.实现实例 <? xml versio ...

  6. javascript笔记整理(变量作用域)

    变量的作用域(作用域:指的就是一段代码的作用范围) 一.变量的作用域 1.全局变量(在代码中任何地方都能够访问得到的变量,拥有全局的作用域) A.最外层函数外面定义的变量 var a=1; funct ...

  7. Android网络:开发浏览器(二)——功能完善之长按网页图片菜单

    上述的历史和书签的功能已经实现.不过如果我们长时间按住图片,并不会出现如同UC中的一系列选项,我们可以来看看UC中的长按图片出现的菜单. 图10.2.9    UC中的长按图片菜单 我们可以看到UC中 ...

  8. android Activity之间数据传递 Parcelable和Serializable接口的使用

    Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去.传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口.0.解 ...

  9. Eclipse选项卡式的属性视图(The Eclipse Tabbed Properties View)

    Eclipse工作台提供了一个性能视图用于查看(和/或编辑)选定项目的属性. 在本文中,您将学习怎样使用选项卡式的属性视图创建一个性能增强的用户界面视图. 1.引言 Eclipse工作台提供了一个属性 ...

  10. java对象占用内存大小计算方式

    案例一: User public class User { } UserSizeTest public class UserSizeTest { static final Runtime runTim ...