1.ViewState怎么禁用2.据说每个控件都又ViewState属性,怎么用3.
        if (ViewState["search"] != null)
        {
            strWhere = ViewState["search"].ToString();        }ViewState和Session一样也是一个缓存变量吗?他的生命周期是什么4. 大家一般怎么用他

解决方案 »

  1.   

    这个你可以从网上查到我一般不用viewstate 这个东西的后置比较多。不是很好用。
      

  2.   

    ViewState是保持页面服务器控件的少量值
      

  3.   


    分页的里面有viewstate的用法,封装等希望对你有帮助
    protected void Page_Load(object sender, EventArgs e)
    {
    if(!IsPostBack)
    {
    ViewState["pageNumber"] = 1;//当前页
    ViewState["pageCount"] = 1;// 总页数
    BindGridView();
    }
    }
    private int PageNumber
    {
    set { ViewState["pageNumber"] = value; }
    get { return Int32.Parse(ViewState["pageNumber"].ToString()); }
    }
    private int PageCount
    {
    set { ViewState["pageCount"] = value; }
    get { return Int32.Parse(ViewState["pageCount"].ToString()); }
    }private void BindGridView() 
    {
    int pages=1;
    DataTable dt = PageBean.GetPage("table", "id", PageNumber, PAGESIZE, "", "id desc", "",out pages);
    PageCount = pages;
    GridView1.DataSource = dt;
    GridView1.DataBind();}跟Session的用法一模一样 ,唯一区别是作用域。
    ViewState只是在当前页面有效。离开页面就消失。
    下面是用法的参考 太多就不C出来了
    ViewState用法
      

  4.   

    ViewState 可以在页面禁用Page.EnableViewState = false;
    也可以在整个网站禁用ViewState
    在Web.Config的<system.web>加入:
    <pages enableSessionState="true" enableViewState="false" enableViewStateMac="false">
    可以全局禁用ViewState据说每个控件都又ViewState属性,怎么用 因为控件都继承于Control类,Control对视图状态进行了处理所以每个都有ViewState和Session一样也是一个缓存变量吗  是的,不同的是ViewState是页面级别的,只在当前页面有效,其实是序列化base64格式的存储在页面的Hidden中,ViewState可以减少服务器负担,但是如果数据量过大的话会引起性能问题,比如一个页面50多K,可以存在Session中使用服务器资源,而解放客户端,在ViewState中保存尽量少的数据。如果实在需要在ViewStatge中放置大量数据建议使用maxPageState- FieldLength对ViewState启用分块传输。
    <%@ Page Language="C#"   … maxPageStateFieldLength="100"%>
      

  5.   

    ViewState在当前Page下有效,应该是缓存变量
      

  6.   

    ViewState其实就是将值加密后存到页面上的一个HiddenField中
      

  7.   

    将enableviewstate设为false就禁用了
    input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"  
    value="/" />  
    ViewState在客户端的保存形式,保存在一个ID为__VIEWSTATE的Hidden中,它的Value是使用Base64编码后的字符串。这个字符串实际上是一个对象序列化之后的结果。这个对象保存了整个页面的控件树的ViewState。可以使用一些工具将这个字符串进行解码查看其内容,比如ViewStateDecoder,ViewStateAnalyzer。  
    Page对客户端请求进行处理,在处理的过程中先是将客户端提交的_VIEWSTATE反序列化为对象,调用Control的相关方法给所有的控件装载数据,这些数据是上次请求结束后控件的状态数据。在请求结束之前调用Control的相关方法得到所有控件的被修改过的状态数据,之后Page将其进行序列化,并返回给客户端。在Control中又具体调用StateBag类的方法完成状态数据的加载和保存。  
      

  8.   

    ViewState类似于cookie,只是将值存储到了页面的隐藏域中。
      

  9.   

    ojlovecd:
     ViewState其实就是将值加密后存到页面上的一个HiddenField中 
    -=--UP
      

  10.   

     viewstate 的用法    最近看赵老师博客的时候,看到一个概念,赵老师在使用asp.net的时候都是先把整个项目的viewstate禁用掉,以减少页面的载重,提高网页的访问速度。然后我又浏览了一些当地的用asp.net做的网站,发现他们做的网页的viewstate都在100k左右,整个网站的速度就不言而喻了。但是我对这个概念不是很清晰,于是认真的研究了一下。
    声明:由于本文是在网上g的,出处忘了,所以如有冒犯,还请与我联系。
            ViewState是ASP.NET的一个独创设计。它为用户在进行Web开发时带来了极大的便利,特别是对于一个WEB开发新手来说,它完全可以不用自己去维护WEB控件的状态,在进行事件驱动开发时,用户只管通过控件ID来获取当前控件的值,而其它的细节ASP.NET都是对用户透明的,所以非常易于入门。而它所带的负面影响也是明显,有时候也是而严重的,最严重的就如上的那篇回发事件执行很慢,甚至时常出现“Validation of viewstate MAC failed”你也不会感到意外。 
       
          那么我们该如何来控制和使用ViewState呢?我想最好还是禁用它,但是也不绝对是这样的。你可以根据你的应用来决定是否禁用 ViewState,那么决定因素有哪些呢? 
       
          1)你的生产环境,也就是说你是在哪里使用的。如果你的是在局域网内部,或是光纤到桌面(也不用光纤,速度有保证就行,这里只是一个比喻)。那么你可以放心使用ViewState。 
       
          2)你对Web开发的理解程度。这是主观因素,如果你对禁用ViewState有足够的控制能力,那么你可以放心的在web.config全局禁用 ViewState。 
       
          3)如果你主观上能够接受ViewState,你希望能充分利用它给我们带来的便利。并且你可以很好的控制ViewState,不让它成为你的性能瓶颈。 
       
          4)你的应用场合,比如你如果是网站前台的话,那请尽量禁用ViewState。(当然也最好不要使用PostBack) 
       
          可能还有其它的原因来决定你是否使用ViewState。这里我们还是希望能够来总结一下ViewState带给我方便的同时,它都带了什么副产品给我们了: 
       
          1)最直观的就是页面体积。使用了ViewState,它会维护所有的控件的状态,在进行PostBack的时候,会适时的进行控件状态的还原。这是什么概念呢?就是控件的值(例如DropdownList里面的所有选项)除了通过HTML的方式显示给用户外,它同时在ViewState中还有一个备份,这个备份会以一个隐含变量的方式存在服务器发送的HTML代码中,同时在PostBack时会把这些ViewState再传回给服务器端。无形中增加了一倍以上的页面体积。 
       
          2)增加了体积了,自然就增加了网络传输。当然页面的反应速度就下降了。 
       
          3)在服务器端增加了一些额外的处理时间。ViewState增加了体积,那么对这些ViewState值的序列化和反序列化的发的时间也是不可小视的。另外,在还原控件状态时,需要对控件进行的遍历和赋值,这个时间也应该算是一个比较大的开销。 
       
          禁用ViewState,解决了一些问题。但是做为WebForm生命周期的一部分,那个ViewState处理函数还是需要被调用的,只是它们在判断 EnableViewState==false以后,所做的事情就比较少了,也就节省时间了。如果你仔细查看一下禁用ViewState的页面,你还会发现有隐含变量__VIEWSTATE。如果你想让这个隐含变量也消失,那么你可以重写Page类的PageStatePersister,来达到这个目的。但是据我的经验,这样做以后好像会有一些其它影响,所以这里建议你尽量不要这样做(其实也没必要这么做)。 
       
          那么禁用了ViewState,是不是说我们就无法利用ViewState给我带来方便了?绝对不是这样的,正因为我们禁用了 ViewState,那么我们就可以开始“滥用”ViewState了。因为有些情况下,我们需要在相同页面的不同的控件中使用一些相同的值。比如,你在查询完数据后,总页数也要在相同页面中的一些在其它控件里使用。这时因为不同控件不在同一个类中,无法使用变量传递,如果你放在缓存和Session中,那么冲突和过期时间就不是你所控制的了。这时我们就可以把它给存放在ViewState,因为ViewState的作用域仅限本页本次请求,页面输出后就随着页面实例而回收了。而因为我们禁用了ViewState了,这时我们在ViewState存的值并不会被序列化到客户端去。这样的“滥用”反而却会给我们的开发带来非常大的方便和灵活。
      

  11.   

    ViewState:常用于保存单个用户的状态信息,可以保存大量的数据但是过多使用会影响应用程序的性能。所有Web服务器控件都使用ViewStat在页面回发期间保存自 己的状态信息。每个控件都有自己的ViewState,不用时最好关闭以节省资源。通过给@Page指令添加"EnableViewState= false"属性可以禁止整个页面的ViewState。使用如下:
    //存取信息
    ViewState["UserNameID"]="1000";
    //读取信息
    string NameID=ViewState["UserNameID"].ToString();
      

  12.   

    ViewState["名称"]=值;
    用的时候
    string aa=ViewState["名称"].tostring();
      

  13.   

    http://www.360doc.com/content/10/0520/21/1190432_28627370.shtml
      

  14.   

    ViewState用于当前页的保存
    session是服务器里面保存的
      

  15.   

                 ViewState一般用户保存当前的页面,在页面回传时值仍然不便。
                 session一般用于保存用户信息,是由语言实现的,与web服务器无关,内容是保存在服务器上面的   ViewState的用法:  // 当前页
      public int PageIndex
      {
             get
             {
                       if (ViewState["pageindex"] != null)
                      {
                                return int.Parse(ViewState["pageindex"].ToString());
                      }
                      return 1;
                       }
                       set
                       {
                                 ViewState["pageindex"] = value;
                       }
               }           
      

  16.   

     晕,少个括号......
     
                public   int   PageIndex
                {
                        get
                        {
                                         if   (ViewState[ "pageindex "]   !=   null)
                                        {
                                                      return   int.Parse(ViewState[ "pageindex "].ToString());
                                        }
                                        return   1;
                                        }
                                        set
                                        {
                                                      ViewState[ "pageindex "]   =   value;
                                        }
                            } 
                 }
      

  17.   

    ViewState 只有回传的时候会被保存
    如果你location.href="当前页面";那么ViewState就会消失
    其实你可以把ViewState看成是一个<input type="hidden" >
    其实微软也是这样实现的只不过是把viewState给压缩了一下而已
      

  18.   

    其实。net的很多服务器控件都是用ViewState来实现的。所以说适当的使用是没有什么问题的
    这个其实就是为什么服务器控件会多少的影响一点性能的原因
      

  19.   

    简单来说 
    viewstate 就是当前页面有效。
    session 就是本次会话中都有效。
    viewstate的作用域要比session的小。
    viewstate 一般用户存储当前页面变量
    向分页的时候可以存储当前第几页。
      

  20.   

    一点只包括 GridView 这样的富控件来说的
    像button 那种几乎可以不计了
      

  21.   

    另外
    你可以随便打开一个asp.net页面  在右击源代码你就可以看到viewstate
      

  22.   

    ViewState 是ASP.NET 用来在同一页面的多个请求之间
    保存和还原服务器控件视图状态的一种机制。与传统的“同
    一页面”不同,ASP.NET 中“同一页面”的每一个请求都会
    导致服务器重新生成该页面,但是新生成的页面并不包含原
    来页面的数据。ViewState 的任务就是保存原来页面中服务器
    控件视图状态的数据供新页面使用。从这个意义上讲,
    ViewState 也可以看作是一种在页面间传递数据的工具。
    ViewState 的工作原理是:作为一个隐藏的窗体字段在客
    户端和服务器之间传递,可见,滥用ViewState 会加重页面
    回传的负担,从而降低应用程序的性能。此外,ViewState 也
    能被控件、页面和应用程序禁用。示例如下(在同一页面中):
    ViewState["id"]=TextBox1.Text; //数据保存
    Label1.Text=ViewState["id"].ToString(); //数据取出
    ViewState.Remove("id"); //数据移除                   生命周期    应用范围  数据类型 数据大小
    使用 ViewState    当前页       单用户   全部     不限
      

  23.   

    web程序是没有状态的,所以每次请求都得不到上次控件值,所以通过viewstate可以做到这点,通俗讲,viewstate存储值会发送到客户端的,每次客户端post完服务器就会将控件上次值从viewstate值读出来填充到控件里。具体可以参考页面生成周期。楼主可以试试将一个控件的viewstate 设置为false,那么你在控件里填一个值,然后提交,你上次填的值就不在了。楼主顺便可以了解下session、application这些都是开发web程序需要了解的对象。