作者:周金桥 上传时间:
2008-1-31 9:22:46 来源:
csdn
在asp.net页面中经常会出现一些ViewState的html标记,也许某些时候你会禁用ViewState,但是某些情况下你不得不使用它——因为它的便捷性,但是由于在默认情况下,ViewState的HTML标记总是在页面的最前面,而且都是一些没有意义的内容,一般的搜索引擎收录的时候 就会将这些无意义的字符串收录进去,这样就会严重影响你所制作的网页在搜索引擎的排名。有没有解决办法?答案是有的,可以将ViewState的Html标记移到底部,不影响性能,对搜索引擎更友好。这种方法就是重写页面的Render,将ViewState的Html标记移到底部。
原始页面的HTML:
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Top.aspx.cs
"
Inherits
=
"
Admin_Top
"
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 调整ViewState的位置,让你的asp.net页面对搜索引擎更友好 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
</ div >
</ form >
</ body >
</ html >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 调整ViewState的位置,让你的asp.net页面对搜索引擎更友好 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
</ div >
</ form >
</ body >
</ html >
这个页面后台没有任何业务cs代码的情况下,得到的HTML代码如下:
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >< title >
调整ViewState的位置,让你的asp.net页面对搜索引擎更友好
</ title ></ head >
< body >
< form name ="form1" method ="post" action ="Top.aspx" id ="form1" >
< div >
< input type ="hidden" name ="__VIEWSTATE" id ="__VIEWSTATE" value ="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ==" />
</ div >
< div >
</ div >
</ form >
</ body >
</ html >
using
System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;
using System.Text;
public partial class Admin_Top : System.Web.UI.Page
{
// ViewState的Html标记的正则表达式
private static readonly Regex viewStateRegex = new Regex( @" (<input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""/w(.*)"" />) " , RegexOptions.Multiline | RegexOptions.Compiled);
// </form>标记的正则表达式
private static readonly Regex endFormRegex = new Regex( @" </form> " , RegexOptions.Multiline | RegexOptions.Compiled);
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标记
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);
}
protected void Page_Load( object sender, EventArgs e)
{
}
}
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;
using System.Text;
public partial class Admin_Top : System.Web.UI.Page
{
// ViewState的Html标记的正则表达式
private static readonly Regex viewStateRegex = new Regex( @" (<input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=""/w(.*)"" />) " , RegexOptions.Multiline | RegexOptions.Compiled);
// </form>标记的正则表达式
private static readonly Regex endFormRegex = new Regex( @" </form> " , RegexOptions.Multiline | RegexOptions.Compiled);
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标记
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);
}
protected void Page_Load( object sender, EventArgs e)
{
}
}
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >< title >
调整ViewState的位置,让你的asp.net页面对搜索引擎更友好
</ title ></ head >
< body >
< form name ="form1" method ="post" action ="Top.aspx" id ="form1" >
< div >
</ div >
< div >
</ div >
< input type ="hidden" name ="__VIEWSTATE" id ="__VIEWSTATE" value ="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ==" /></ form >
</ body >
</ html >