博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
别总以为asp.net mvc比asp.net web form好--web form的页面也可以体积小巧
阅读量:6924 次
发布时间:2019-06-27

本文共 2989 字,大约阅读时间需要 9 分钟。

最近才看到网上有一种对asp.net web form的误解。也有很多讨论,弄得微软ScottGu也来澄清。asp.net mvc和web form是并行存在的两种开发模式。许多人对web form的诟病很多,其中最主要的就是说viewstate,随便一个web form页面,其html源码就体积很大,主要是隐藏字段viewstate体积比较大,至少几十K,页面复杂一点,viewstate的大小能上几兆,这样大体积的页面,在浏览器和服务器之间传输,对网络带宽也是一个很大的压力,所以asp.net webform的性能肯定受很大影响。这其实是一个对asp.net web form的特大误解。这里提供一个小技巧。可以让asp.net web form的页面和asp.net mvc的页面一样体积小巧。同时还能享受viewstate带来的好处。

举例来说:一个显示记录列表的form。如下图:

 这是一个很简单的页面了。其html源代码是:

      
My label
AddressID AddressLine1 AddressLine2 City StateProvince CountryRegion PostalCode
9 8713 Yosemite Ct.   Bothell Washington United States 98011
11 1318 Lasalle Street   Bothell Washington United States 98011
25 9178 Jumping St.   Dallas Texas United States 75201
28 9228 Via Del Sol   Phoenix Arizona United States 85004
32 26910 Indela Road   Montreal Quebec Canada H1Y 2H5
1 2 3 4 5 6 7 8 9 10 ... >>

可见其隐藏字段viewstate体积较大。对应用程序的性能会有较大影响。 

通过如下方法,可以让页面html源代码体积变小巧。

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace EntLibSample{    public class BasePage : System.Web.UI.Page    {        protected override void SavePageStateToPersistenceMedium(object viewState)        {            Session["viewState" + this.Context.Request.FilePath] = viewState;        }        protected override object LoadPageStateFromPersistenceMedium()        {            if (Session["viewState" + this.Context.Request.FilePath] != null)            {                return Session["viewState" + this.Context.Request.FilePath];            }            return string.Empty;        }    }}

这个BasePage类继承了System.Web.UI.Page类。System.Web.UI.Page中的SavePageStateToPersistenceMedium和LoadPageStateFromPersistenceMedium方法是将viewstate的内容发到客户端浏览器中,那么每次向服务器发请求,都需将体积庞大的viewstate字段发回服务器,服务器返回结果时,又将体积庞大的viewstate字段发回来。这给应用程序整体性能带来了很大冲击。BasePage类改写了此两个方法。将viewstate内容放到session中,用的时候又从session取回来。这样避免了在网络上来回传输体积庞大的viewstate内容。 

应用程序的所有页面都继承此BasePage类。这样就可以将此方法应用于所有的asp.net web form页面。

其效果如下:

      
My label
AddressID AddressLine1 AddressLine2 City StateProvince CountryRegion PostalCode
9 8713 Yosemite Ct.   Bothell Washington United States 98011
11 1318 Lasalle Street   Bothell Washington United States 98011
25 9178 Jumping St.   Dallas Texas United States 75201
28 9228 Via Del Sol   Phoenix Arizona United States 85004
32 26910 Indela Road   Montreal Quebec Canada H1Y 2H5
1 2 3 4 5 6 7 8 9 10 ... >>

 可见viewstate字段的内容完全没有了。这样html源代码的整体体积就小了很多。这对应用程序的性能提高是很大好处的。曾经只有asp.net mvc才有的体积小页面,现在asp.net web form也可以做到了。同时asp.net web form还有开发效率相对较高,还可以利用viewstate带来的好处,有了这些综合考虑,大家应该会重拾对asp.net web form的信心,继续在asp.net web form的旅程。

 

 

转载地址:http://khkjl.baihongyu.com/

你可能感兴趣的文章
你真的完全了解Java动态代理吗?看这篇就够了
查看>>
【成都首脑智能】智能家居中无线路由器安全的重要性
查看>>
Linux初级优化
查看>>
怎样快速将PDF转换成Excel文件
查看>>
多功能切菜机的精华所在
查看>>
企业运营系统理念践行者——张恩嘉
查看>>
OC中的数据库
查看>>
我的友情链接
查看>>
Problems about tornado.
查看>>
http协议分析
查看>>
信号量(sem)
查看>>
第五周作业【Linux微职位】
查看>>
MySql入门教程mysql基础知识学习实例讲解
查看>>
const的理解
查看>>
cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
查看>>
设计模式系列 - Composite模式
查看>>
linux配置修改ip地址
查看>>
Shell脚本之Mysql授权
查看>>
开始写博客了
查看>>
SCCM 2007 实现PXE要点
查看>>