可恶的viewstate

先上段代码


ContractedBlock.gif ExpandedBlockStart.gif Code
  private static readonly Regex viewStateRegex = 
            
new Regex("<input type=\"hidden\" name=\"__VIEWSTATE\".*/>", RegexOptions.IgnoreCase); //过滤viewstate html标记的正则表达式


        
private static readonly Regex endFormRegex =
            
new Regex(@"</form>", RegexOptions.Multiline | RegexOptions.Compiled); //过滤 </form>标记的正则表达式

 

        
//重写HTML,过滤viewstate并输出
        protected override void Render(HtmlTextWriter writer)
        {
            System.IO.StringWriter stringWriter 
= new System.IO.StringWriter();
            HtmlTextWriter htmlWriter 
= new HtmlTextWriter(stringWriter);
            
base.Render(htmlWriter);

            
string html = stringWriter.ToString();
            Match viewStateMatch 
= viewStateRegex.Match(html);
            
string viewStateString = viewStateMatch.Captures[0].Value;//找出ViewState的Html标记 目的把viewstate的内容放到页面FORM的最后面加快加载速度和搜索抓录
          
//  viewStateString = "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"\" />"; //仿博客园

            html 
= html.Remove(viewStateMatch.Index, viewStateMatch.Length);//替换掉ViewState的html标记

            Match endFormMath 
= endFormRegex.Match(html, viewStateMatch.Index);
            html 
= html.Insert(endFormMath.Index, viewStateString);//将ViewState的Html标记插入到</form>标记之前
            writer.Write(html);

        }

      这段代码写在你的PAGE基类里,然后看下效果就明白了,把viewstate的内容放在了最后面,这样做两个目的,第一避免VIEWSTATE过大导致页面加载速度过慢,第二避免搜索引擎访问该页面没有找到准确的信息。

现在来谈谈viewstate,我一般能不用就不用,对这个东西是深恶痛绝,看着页面出现VIEWSTATE的代码就恶心,觉得像个毒瘤。解决方案有几种
第一,禁用viewstate,在web.config里配置,然后页面传值使用form或者cookies,别用session和application他们都是服务器杀手,这种方式灵活度不高,而且微软自带的控件无法使用了,不如用JSP来做
第二,局部禁止viewstate,在页面配置,然后不能禁止的地方用我上面的代码来把viewstate放页面下方
第三,使用微软的MVC框架,很好用,不过个人感觉开发起来蛮麻烦的,不推荐也不抵触,觉得还不成熟这个东西
第四,使用ajax+web services来搞定,推荐这种方法,真正的页面代码和业务代码分离,很爽,虽然有些烦琐编码的时候,不过感觉很爽。
这就是我对viewstate的几个应对方法,有BOSS来,请指教。

转载于:https://www.cnblogs.com/javabin/archive/2009/08/04/1538502.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值