ASP.NET: перемещение ViewState в конец страницы - PullRequest
6 голосов
/ 04 марта 2010

Каковы последние и лучшие способы переместить ViewState в внизу страницы

Можно ли это сделать в IHttpHandler , который можно указать в web.config для перехвата запросов к "* .aspx"?

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

Другими вариантами является то, что это можно сделать в IHttpModule , но это не как исполнитель , так как он будет перехватывать все запросы.

Также это можно сделать в классе, производном от Page или MasterPage -класса, но это не как модульный .

Есть ли штрафы за производительность к этому?

Ответы [ 3 ]

2 голосов
/ 04 марта 2010

Вы можете контролировать, как и где данные ViewState загружаются и сохраняются, создавая пользовательскую реализацию класса PageStatePersister. Затем создайте базовый класс для всех ваших страниц ASPX и переопределите метод PageStatePersister для возврата вашей пользовательской реализации. Затем он может подключиться к событиям на странице, которые вы хотите сохранить, в соответствии с вашими требованиями.

Я спрашиваю, стоит ли это того или нет. Вы храните тонну данных в ViewState без необходимости? Возможно, вы можете получить больше преимуществ, просто используя ViewState меньше или отключив его для некоторых элементов управления, а не просто перемещая его в другое место на странице HTML.

1 голос
/ 31 марта 2010

После проведения некоторых исследований я собрал этот пост .

Я решил проблему, создав HttpModule и применив Фильтр ответов , который изменяет вывод страницы и перемещает 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;
    }
    // [...]
0 голосов
/ 04 марта 2010

Расширение класса Page дает вам максимальный контроль над отображением страницы. Если вы хотите переместить ViewState в конец данной страницы, используйте свой пользовательский базовый класс для этой страницы. Если вам не нужно, используйте класс Page.

Единственный риск для производительности при выводе из класса Page заключается в реализации переопределенных методов. Если вы не делаете что-то особенно неэффективное, не должно быть никакого ощутимого снижения производительности.

...