调整ViewState的位置,让你的asp.net页面对搜索引擎更友好

在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 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" >

<div>

<input type="hidden" name="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ==" />

</div>

<div>

</div>

</form>

</body>

</html>

现在不改变前台aspx代码,重写Render方法,后台cs代码如下:

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"" > 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)

{

}

}

最后生成的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" >

<div>

</div>

<div>

</div>

<input type="hidden" name="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ==" /></form>

</body>

</html>

最后的结果大家也看到了,确实移动了ViewState的html标记的位置,这样对搜索引擎更友好。