23
2009
04

Asp.Net程序员与SEO - Viewstate优化(二)

最近有些忙,终于把Asp.net的 Viewstate优化(二) 这里出来。前面的Asp.Net程序员与SEO - Viewstate优化( 一 )可能看起来不是很明白,那么我这篇翻译后给大家留个原代码,可以下载下来看看。下面内容接上节开始:

 

我们的网页适配器在这个form的底部添加一个隐藏字段__SEOVIEWSTATE来放实际视图状态数据,唯一的局限性是你不能直接在asp.net form 内的表达式来表现它。然而,这种限制可以很容易地避免把表达的预留位置控制或内部另一个控制。深入解释这一限制看看这篇文章

让我们通过一个例子来看适配器起的作用. 下面的ASP.NET page:

<%@ Page Language="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="SEOViewStateAdapterTest._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
   
<title></title>
</head>
<body>
   
<formid="form1"runat="server">
   
<div>
        Enter a message:
<br/>
       
<asp:TextBoxID="txtMessage"runat="server"></asp:TextBox><br/>
       
<asp:ButtonID="bSaveMessage"runat="server"Text="Save Message"onclick="bSaveMessage_Click"/><br/>
       
<asp:LabelID="lMessage"runat="server"></asp:Label><br/>
       
       
<p>Page generated at <asp:PlaceHolderID="PlaceHolder1"runat="server"><%= DateTime.Now.ToString("hh:mm dd/MM/yyy") %></asp:PlaceHolder></p>
   
</div>
   
</form>
</body>
</html>
 

 
关联的CS代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;

namespace SEOViewStateAdapterTest
{
   
publicpartialclass _Default :System.Web.UI.Page
   
{
       
protectedvoid Page_Load(object sender, EventArgs e)
       
{
           
if(!Page.IsPostBack){
                ViewState
["previousMessage"]= txtMessage.Text;
           
}
       
}

       
protectedvoid bSaveMessage_Click(object sender, EventArgs e)
       
{
            lMessage.
Text=String.Format("The current message is '{0}'. The previous message was '{1}'", txtMessage.Text, (string)ViewState["previousMessage"]);
            ViewState
["previousMessage"]= txtMessage.Text;
       
}
   
}
}
 
 
没有使用我们的适配器情况下,在几次 postbacks 后,我们看到网页的HTML代码是这样的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
   
<formname="form1"method="post"action="Default.aspx"id="form1">
<div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value="/wEPDwUJc01l[...]VwP+cfdSWI6Q=="/>
</div>

<div>

   
<inputtype="hidden"name="__EVENTVALIDATION"id="__EVENTVALIDATION"value="/wEWAwKb4uenCgK/1s7/DwKf8MMPfiUvZtKPSXk//XdxkLooz8QDI0Y="/>
</div>
   
<div>
        Enter a message:
<br/>
       
<inputname="txtMessage"type="text"value="Message 2"id="txtMessage"/><br/>
       
<inputtype="submit"name="bSaveMessage"value="Save Message"id="bSaveMessage"/><br/>
       
<spanid="lMessage">The current message is 'Message 2'. The previous message was 'Message 1'</span><br/>
       
       
<p>Page generated at 08:13 04/12/2008</p>
   
</div>
   
</form>
</body>
</html>
 
使用我们的适配器情况,在几次 postbacks 后,我们看到网页的HTML代码是这样的。看,视图数据代码被移到底部啦。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
   
<formname="form1"method="post"action="Default.aspx"id="form1">
<div>
<inputtype="hidden"name="__VIEWSTATE"id="__VIEWSTATE"value=""/>
</div>

<div>

   
<inputtype="hidden"name="__EVENTVALIDATION"id="__EVENTVALIDATION"value="/wEWAwL+raDpAgK/1s7/DwKf8MMPyF7nqN1AbwNwFBq8OAjEAQorsyo="/>
</div>
   
<div>
        Enter a message:
<br/>
       
<inputname="txtMessage"type="text"value="Message 2"id="txtMessage"/><br/>
       
<inputtype="submit"name="bSaveMessage"value="Save Message"id="bSaveMessage"/><br/>
       
<spanid="lMessage">The current message is 'Message 2'. The previous message was 'Message 1'</span><br/>
       
       
<p>Page generated at 08:11 04/12/2008</p>
   
</div>
   
<inputtype="hidden"name="__SEOVIEWSTATE"id="__SEOVIEWSTATE"value="/wEPc01lc3[...]CdNY6AtgigHvU="/></form>
</body>
</html>
 
为了使用的适配器,您必须添加一个引用,并添加一个名为SEOViewStateAdapter.browser (文件的名称并不重要。扩展名需要是相同的。或者也可以合并的内容另一个文件如果您已经有一个)到App_Browsers文件夹中。该文件应为:
<browsers>
   
<!-- use the adapters for all browsers -->
   
<browserrefID="Default">
       
<controlAdapters>
           
<!-- ths adapter is used to save the view and control state at the bottom of the form so the page is more friendly to search engines -->
           
<adaptercontrolType="System.Web.UI.Page"adapterType="Manu.Web.Adapters.SEOFriendlyViewStatePageAdapter, SEOViewStateAdapter"/>
       
</controlAdapters>
   
</browser>
</browsers>
 
 当你还不是很明白讲的是文章内容的时候,你可以下载下面的代码来看。

SEOViewState.zip

« 上一篇下一篇 »

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。