ASP.NET:将ViewState移动到页面底部

Seb*_*son 6 asp.net viewstate webforms

将ViewState移动到页面底部的最新和最好的方法是什么?

这可以在IHttpHandler中完成,可以在web.config中指定拦截对"*.aspx"的请求吗?

<httpHandlers>
    <add verb="*" path="*.aspx" type="MyApp.OptimizedPageHandler" />
<httpHandlers>
Run Code Online (Sandbox Code Playgroud)

其他选择是,这可以在IHttpModule中完成,但这不是高效的,因为它将拦截所有请求.

它也可以在一个派生自PageMasterPage类的类中完成,但这不是模块化的.

对此有任何性能损失吗?

Seb*_*son 1

经过一些研究后,我整理了这篇博文

我通过创建HttpModule并应用Response Filter解决了该问题,该过滤器修改页面的输出并将 ViewState 移动到表单的底部。

public class ViewStateSeoHttpModule : IHttpModule {
    public void Init(HttpApplication context) {
        context.BeginRequest += new EventHandler(BeginRequest);
    }

    private void BeginRequest(object sender, EventArgs e) {
        HttpApplication application = sender as HttpApplication;

        bool isAspNetPageRequest = GetIsAspNetPageRequest(application);
        if(isAspNetPageRequest) {
            application.Context.Response.Filter =
                new ViewStateSeoFilter(application.Context.Response.Filter);
        }
    }

    private bool GetIsAspNetPageRequest(HttpApplication application) {
        bool isAspNetPageRequest = application.Context.Handler is System.Web.UI.Page;
        return isAspNetPageRequest;
    }
    // [...]
Run Code Online (Sandbox Code Playgroud)

  • 这是非常乐观的...无扩展名 url 怎么样,或者如果您使用的是 aspx 之外的其他东西?不,您应该查看当前处理程序是否是 System.Web.UI.Page。bool isAspNetPageRequest = application.Context.Handler 是 System.Web.UI.Page; (2认同)