代码之家  ›  专栏  ›  技术社区  ›  Seb Nilsson

ASP.NET:将视图状态移动到页面底部

  •  6
  • Seb Nilsson  · 技术社区  · 14 年前

    将视图状态移动到 页面底部

    这个能在一个 处理程序 可以在 Web.CONFIG 拦截对“*.aspx”的请求?

    <httpHandlers>
        <add verb="*" path="*.aspx" type="MyApp.OptimizedPageHandler" />
    <httpHandlers>
    

    其他选择是可以在 IHTTP模块 ,但那是 没有表现得那么好 ,因为它将截获所有请求。

    也可以在派生自 母板页 -班,但这是 非模块化 .

    有没有 惩罚性折扣 对此?

    3 回复  |  直到 11 年前
        1
  •  2
  •   Samuel Neff    14 年前

    您可以通过创建 PageStatePersister 班级。然后为所有 ASPX 页面并重写 页面状态保持器 方法返回自定义实现。然后,根据您的需求,可以点击任何想要存储视图状态的页面事件。

    但我怀疑这是否值得。你在存储大量的数据吗? ViewState 不必要的?也许你只需使用 对象 减少或关闭某些控件,而不是将其移动到HTML页中的其他位置。

        2
  •  1
  •   Seb Nilsson    12 年前

    在做了一些研究之后,我把 this blog-post .

    我通过创建一个 HTTP模块 并应用 响应滤波器 哪一个 修改输出 并将视图状态移动到窗体的底部。

    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;
        }
        // [...]
    
        3
  •  0
  •   PunctuallyChallenged    14 年前

    扩展页面类使您对页面呈现具有最大的控制权。如果要将视图状态移动到给定页面的底部,请使用该页面的自定义基类。如果不需要,请使用Page类。

    从page类派生时唯一的性能风险是在重写方法的实现中。除非你做的事情特别低效,否则不应该有任何明显的性能损失。