编程语言
首页 > 编程语言> > 调整asp.net下的viewState的位置

调整asp.net下的viewState的位置

作者:互联网

原文链接:http://www.cnblogs.com/xiao_haun/archive/2011/05/16/2047634.html

调整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 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> 现在不改变前台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"" 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)
    {

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

</div>

    <div>
    
    </div>
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTKRk3xYdpqlKIfqyg44evx9dxYpQ==" /></form>
</body>
</html>
将 value=""[w+\/=]+""改成value=""/w(.*)""这样就可OK了,不然就会报错误!

转载于:https://www.cnblogs.com/xiao_haun/archive/2011/05/16/2047634.html

标签:Web,asp,标记,System,html,using,net,viewState,ViewState
来源: https://blog.csdn.net/weixin_30252155/article/details/99059920