asp.net生成静态后冗余代码,去掉viewstate生成的代码_实用技巧

看着自己网站编译之后的源文件,里面很多乱七八糟的东西,看了就觉得不舒服

复制代码 代码如下:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE3NjgxMzM0MDIPZBYCZg9kFgIC……

还有form源文件,一看就知道是asp.net的页面

复制代码 代码如下:

<form name="form1" method="post" action="smartDropDownList.aspx" id="form1">

知道也是ASP.NET做的,就好奇地看看博客园的首页源文件,发现没有这些玩意,后来问了下别人,

网上也找了点资料;

总结了一下自己的想法:
1、如果你的一个页面没有什么复杂的数据交互,例如登录你可以改用成ajax的登录,单条新闻界面也可以去掉,如果有留言也可以采用ajax的方式去完成!

2、后台管理页面,数据交互性一般都有点复杂,我就觉得没有什么必要去掉哪些东西了,反正后台对SEO没有任何影响,我好奇地看了看博客园的后台也是有的
不废话了,直接贴代码,在你的页面代码中加上如下函数

复制代码 代码如下:

protected override void Render(HtmlTextWriter writer)
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
base.Render(tw);
string Temp = html.ToString();
string s1 = string.Empty, s2 = string.Empty, s3 = string.Empty, s4 = string.Empty, s5 = string.Empty, s6 = string.Empty;
int i = 0;
int j = 0;
i = Temp.IndexOf("<form");
if (i > 0)
{
j = Temp.IndexOf(">", i);
s1 = Temp.Substring(0, i);
s2 = Temp.Substring(j + 1, Temp.Length - j - 1);
}
i = s2.IndexOf("<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\"");
if (i > 0)
{
j = s2.IndexOf(">", i);
s3 = s2.Substring(0, i);
s4 = s2.Substring(j + 1, s2.Length - j - 1);
}
i = s4.IndexOf("<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\"");
if (i > 0)
{
j = s4.IndexOf(">", i);
s5 = s4.Substring(0, i);
s6 = s4.Substring(j + 1, s4.Length - j - 1);
Temp = s1 + s3 + s5 + s6;
}
else
{
Temp = s1 + s3 + s4;
}
Temp = Temp.Replace("</form>", "");
Temp = Temp.Replace("\r\n", "");
tw.Close();
Response.Write(Temp);
}

其实就是重写了Render方法,然后截取html源文件就能解决了,更具自己的情况去使用,觉得好用就用下!
如果你觉得简单,或者不屑,不要喷,有问题请拍砖,谢谢!

2.查询老外的解决办法,是将代码移动到尾部,但发现部分网页报错, 之后发现把网页的enableviewatate=false 明显的viewstate 代码减少。

  原因总结:
  (1)、这是由于net记录控件视图状态的. asp.net服务器控件默认都记录的.
  如果你确定一个控件是不需要记录控件状态,可以给他的EnableViewState赋值false禁用.
  个人总结:
  关闭视图也不是最终解决办法,只会减少,最彻底的办法就是把form表单做成普通的html标签。
  省去runat="server"就可以。程序尽管重要,但如果做出来的程序没有什么效果,是没有意义的,
  网友见解:
  视图状态,这可不是什么无用的代码。你使用服务器控件,为什么在每一次提交后,会将信息以控件对象的方式读取到呢?都是因为有了视图状态。

  视图状态是可以禁用的,不过只使用EnableViewState=false是不彻底的,你还会在页面中看到__VIEWSTATE的隐藏域。这是因为就算禁用了他,还是会有一个服务器控件在那里使用,就是from runat="server",如果你将from编程普通html标签,那么页面就干净了。

  当然,禁用视图状态后,是会提升系统效率的,因为程序不会再去分析视图状态中值,再为控件对象初始化了。这样做对于网站来说是高效的,但如果是做引用程序,那就有点自找麻烦了。

时间: 2024-08-30 00:54:37

asp.net生成静态后冗余代码,去掉viewstate生成的代码_实用技巧的相关文章

asp.net生成静态页并分页+ubb第1/2页_实用技巧

作为练习我加入了"插入代码""插入运行代码",大家可以看情况,加入其他UBB. 2.代码:default.aspx.cs 复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; usi

asp.net url传递后地址栏乱码(中文超过两个汉字)_实用技巧

编码编好的url是正确的,可传到另一个页面 就会出错,在地址栏就已经乱码了 1.设置web.config文件 复制代码 代码如下: <system.web> <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> </system.web&g

ASP.Net刷新页面后自动滚动到原来位置方法汇总_实用技巧

在网上搜索之后总结了三种方式: 1.设置Page中的MaintainScrollPositionOnPostback属性为true A>.页面里有MaintainScrollPositionOnPostback,默认是false,设为true即可(页面级) 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  Mai

asp.net计算一串数字中每个数字出现的次数_实用技巧

接下来拆分这一串字符串,每个字符插入一个表变量中,最后使用GROUP BY进行分组. 复制代码 代码如下: CalNumOfChtInStr SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Insus.NET -- Create date: 2012-02-23 -- Description: Calculate the num

ASP.NET 控件开发系列之图片切换web控件_实用技巧

开发系列之图片切换web控件_实用技巧-">贴出来控件页面的代码. PicList.ascx 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PicList.ascx.cs" Inherits="WebParts_PicList" %> <style type="text/css"&

ASP.NET编程中经常用到的27个函数集_实用技巧

ASP.Net是建立在微软新一代.Net平台架构上,利用普通语言运行时(Common Language Runtime)在服务器后端为用户提供建立强大的企业级Web应用服务的编程框架.下面列举了常用的27个ASP.NET中的函数集: 1.DateTime 数字型 复制代码 代码如下: System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年

ASP.NET性能优化之让浏览器缓存动态网页的方法_实用技巧

OutputCache是针对所有访问服务器资源的用户,本篇要介绍的浏览器缓存则是针对单个用户,让浏览器在我们的控制下彻底不持续访问服务器上的动态内容,也就是我们要让浏览器变成我们的缓存机制中的一部分,在某些特定的场景下最大化地提升ASP.NET站点的性能.如果说OutputCache是从广度上提升并发效率,则浏览器缓存是从深度上提升效率. 一:HTTP头简介 1.1浏览器第一次请求 假设我们请求一个URL地址,譬如我服务器上的一个静态页面http://192.168.0.77/luminji2/

ASPNET按钮只执行客户端代码不回送页面实现思路_实用技巧

asp.net的Button默认行为是将页面回送后执行服务器代码.在页面中还可以使用html的按钮控件input type="button",但是这种HTML控件在cs文件中引用不到. asp:Button在cs文件中可用,如何使它只执行客户端JavaScript代码而不回送执行服务器端代码呢? 首先介绍asp:Button的两个事件OnClientClick和OnClick,前者OnClientClick是执行客户端JavaScript代码,后者OnClick是服务器代码,先执行po

ASP.NET中使用开源组件NPOI快速导入导出Execl数据_实用技巧

相信很多童鞋都开发过Execl的导入导出功能,最近产品中无论是后台数据分析的需要,还是前端满足用户管理的方便,都有Execl导入导出的维护需求产生. 以前做这个功能,如果是web,利用HttpContext.Current.Response.ContentType ="application/ms-excel";就可以导出html数据表格到execl中,这种方法的问题就是编码格式的兼容性太差,用Mac OS之类的 office打开直接乱码给你看.或者是调用office的COM组件,或宏

asp.net中利用ashx实现图片防盗链的原理分析_实用技巧

 直接分析盗链原理:看下面用httpwatch截获的http发送的数据 GET /Img.ashx?img=svn_work.gif HTTP/1.1 Accept: */* Referer: http://www.jb51.net/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NE