在asp.net页面中经常会出现一些ViewState的html标记,也许某些时候你会禁用ViewState,但是某些情况下你不得不使用它——因为它的便捷性,但是由于在默认情况下,ViewState的HTML标记总是在页面的最前面,而且都是一些没有意义的内容,一般的搜索引擎收录的时候就会将这些无意义的字符串收录进去,这样就会严重影响你所制作的网页在搜索引擎的排名。有没有解决办法?答案是有的,可以将ViewState的Html标记移到底部,不影响性能,对搜索引擎更友好。这种方法就是重写页面的Render,将ViewState的Html标记移到底部。
原始页面的HTML:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Top.aspx.cs"Inherits="Admin_Top"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>调整ViewState的位置,让你的asp.net页面对搜索引擎更友好</title>
</head>
<body>
<formid="form1"runat="server">
<div>
</div>
</form>
</body>
</html>
这个页面后台没有任何业务cs代码的情况下,得到的HTML代码如下:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head><title>
调整ViewState的位置,让你的asp.net页面对搜索引擎更友好
</title></head>
<body>
<formname="form1"method="post"action="Top.aspx"id="form1">
<div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ=="/>
</div>
<div>
</div>
</form>
</body>
</html>
现在不改变前台aspx代码,重写Render方法,后台cs代码如下:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Text.RegularExpressions;
usingSystem.Text;
publicpartialclassAdmin_Top:System.Web.UI.Page
{
//ViewState的Html标记的正则表达式
privatestaticreadonlyRegexviewStateRegex=newRegex(@"(<inputtype=""hidden""name=""__VIEWSTATE""id=""__VIEWSTATE""value=""[w+//=]+""/>)",RegexOptions.Multiline|RegexOptions.Compiled);
//</form>标记的正则表达式
privatestaticreadonlyRegexendFormRegex=newRegex(@"</form>",RegexOptions.Multiline|RegexOptions.Compiled);
protectedoverridevoidRender(HtmlTextWriterwriter)
{
System.IO.StringWriterstringWriter=newSystem.IO.StringWriter();
HtmlTextWriterhtmlWriter=newHtmlTextWriter(stringWriter);
base.Render(htmlWriter);
stringhtml=stringWriter.ToString();
MatchviewStateMatch=viewStateRegex.Match(html);
stringviewStateString=viewStateMatch.Captures[0].Value;//找出ViewState的Html标记
html=html.Remove(viewStateMatch.Index,viewStateMatch.Length);//替换掉ViewState的html标记
MatchendFormMath=endFormRegex.Match(html,viewStateMatch.Index);
html=html.Insert(endFormMath.Index,viewStateString);//将ViewState的Html标记插入到</form>标记之前
writer.Write(html);
}
protectedvoidPage_Load(objectsender,EventArgse)
{
}
}
最后生成的Html页面的代码:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head><title>
调整ViewState的位置,让你的asp.net页面对搜索引擎更友好
</title></head>
<body>
<formname="form1"method="post"action="Top.aspx"id="form1">
<div>
</div>
<div>
</div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ=="/></form>
</body>
</html>
最后的结果大家也看到了,确实移动了ViewState的html标记的位置,这样对搜索引擎更友好。
分享到:
相关推荐
ASP.NET ViewState 初探
ASP.NET 参考手册 在 W3School,我们提供完整的 ASP.NET 参考手册,其中包括内建对象和组件,以及它们的属性和方法。 ASP.NET 实例 ASP.NET 实例 一系列的 ASP.NET 实例。 内容目录 ASP.NET 简介 本章解释 ASP.NET...
有些asp.net中使用viewstate,那里的内容是base64编码,此工具是把viewstate 内容给解析成原来内容,里面包括1.0,1.1,2.0三种版本的工具
理解ASP.NET的ViewState MSDN资料
ASP.net压缩ViewState,ASP.net操作EXCEL,Word,ASP.net获得验证码,汉字验证码、扭曲验证码
ASP.NET ViewState 初探.doc ASP.NET Web 方法中的 XmlElement 参数的功能.d ASP.NET 中 Cookie 的基本知识.doc ASP.NET 页面对象模型.doc asp.net200问-专家门诊—ASP.NET开发答疑 ASP.NetWebPage深入探讨....
asp.net 2.0中通过压缩ViewState 支持ajax压缩ViewState
提高模块的重用性,但缺陷是性能上会有一些损失,例如不用数据绑定,显然也就不必判断数据来源和转换数据类型,不用页面控件和控件事件等,也就避免了使用ViewState,此外.NET控件往往追求功能齐全,当你只需要一...
提高模块的重用性,但缺陷是性能上会有一些损失,例如不用数据绑定,显然也就不必判断数据来源和转换数据类型,不用页面控件和控件事件等,也就避免了使用ViewState,此外.NET控件往往追求功能齐全,当你只需要一...
asp.net的网址重定向方法的比较:面向搜索引擎友好 也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多...
如果在客户端和服务器段保持往返的状态,在.net中通过加入一个隐藏控件_ViewState来实现的,这些状态的保持不需要程序员来控制,节省了程序员的精力。但是如果大量使用viewstate会影响性能,例如页面中控件过多,那么...
提高模块的重用性,但缺陷是性能上会有一些损失,例如不用数据绑定,显然也就不必判断数据来源和转换数据类型,不用页面控件和控件事件等,也就避免了使用ViewState,此外.NET控件往往追求功能齐全,当你只需要一...
比较学习ASP.net中的Session、ViewState、Application、Cookies
ASP.NET ViewState解决办法,优化办法,移动ViewState
asp.net中html页面含有viewstate页面状态,说实话很难看,所以尝试把它保存在服务器端,只是一个思路例子,希望对大家有所帮助。
同时,将ASP.NET中的页面样式代码和逻辑处理代码分离能够让维护变得简单,同时代码看上去也非常的优雅。在.aspx页面中,代码隐藏页模型的.aspx页面代码基本上和单文件页模型的代码相同,不同的是在script标记中的单...
ASP.NET保存信息总结(Application,Session,Cookie,ViewState和Cache等) .doc
ASP.NET_Application,Session,Cookie和ViewState等对象用法和区别,word文档说明。
ASP.NET状态管理(Cookies,Session,ViewState,Application...)
根据经验的总结,让我们来看看十个能帮助你提升你的应用程序性能的经验,我将按将它们提升效率的多少从大到小小依次说明,一、返回多个数据集,二、对数据进行分页,三、连接池 ,四、 ASP.NET缓存API ,五、 预请求缓存,...