updatepanel против методов страницы - PullRequest
6 голосов
/ 04 марта 2012

Я использую update panels все время, когда я хочу обновить определенную часть моей страницы, но в последнее время я сталкиваюсь с проблемами производительности (я имею в виду, что он медленно отображает нужный элемент управления, а иногда он не работает и требует многократного щелчка мышью).на работу !!

, поэтому мой вопрос:

  • Можно ли рассматривать метод страницы как эффективную альтернативу панели обновлений и делать магию ajax?
  • Какие есть другие альтернативы?

Если возможно, приведите простой пример, поясняющий, как заменить панель обновления с использованием методов страницы?

Ответы [ 4 ]

16 голосов
/ 02 июля 2012

Раньше я был таким, как вы, несколько лет назад, я использовал увеличение производительности от UpdatePanel до , чтобы неправильно понять, что я увеличивал производительность своих приложений ...

Ну, я был совершенно неправ, UpdatePanel является корнем всего UI-зла, прежде всего оно скрывает сложность использования AJAX, которая облегчает большинство из нас, давая нам неверную идеючто мы создаем адаптивные приложения, что хуже, чем если бы мы вообще не использовали его (это основная причина, по которой я использовал его на всех своих страницах, и я уверен, что именно поэтому многие разработчики используют его ...потому что это легко).

Рассмотрим следующие статьи:

Когда вы поймете, что на самом деле UpdatePanel делает против простого вызова PageMethod или службы REST WCF, выувидеть огромную разницу между ними.

  • UpdatePanel.Когда вы выполняете сообщение из UpdatePanel, должен быть выполнен весь жизненный цикл страницы, это означает, что требуется отправить всю страницу ViewState для каждого сообщения, когда ваша страница усложняется с несколькими элементами управления, ViewState будетконечно, будет огромным, и это, безусловно, будет проблемой производительности.Используя их, вы получаете только частичный рендеринг , элементы управления внутри вашего UpdatePanel будут отображаться без полной обратной отправки, хотя вам нужно отправлять весь ViewState при каждом запросе.

  • PageMethod.Методы страницы static, они вызываются так, как если бы они были сервисными методами, им не нужно создавать весь жизненный цикл страницы для выполнения, поэтому они выполняются быстрее.

Казалось бы, использование PageMethods было бы решением, проблема в том, что PageMethods обычно используются для возврата объектов JSON, что означает, что вам придется визуализировать эти объекты вручную ,Это означает, что если вы хотите избавиться от всех своих UpdatePanel, вам придется изменить элементы управления, используемые в ваших представлениях, вы не сможете использовать, например, GridView из коробки,вместо этого вам придется изменить его для JQGrid (или аналогичного).

Это естественно, если вы создаете приложение MVC, но с традиционным ASP.Net это не так просто.

Вам также необходимо учесть что-то очень важное, ViewState проверяется по умолчанию для каждого сообщения , вы можете отключить его, но это не рекомендуется, если вы хотите быть уверенным, что ваш ViewState имеетне был поврежден ( посмотрите на этот вопрос ).

Рассмотрим этот пример, у вас есть два DropDownList элемента управления (с именем: ddl1, ddl2) ddl2 зависит от ddl1 , поэтому, используя событие SelectedIndexChanged, вы заполняете второй выпадающий список.Но если вы попытаетесь сделать то же самое, используя вызовы AJAX (без UpdatePanel), вы столкнетесь с двумя проблемами

  • Рендеринг, вам необходимо вручную добавить объекты в HTML selectэлемент управления, представляющий DropDownList.Вы можете использовать сторонний фреймворк для связывания этих элементов управления с помощью javascript, я могу порекомендовать вам knockoutjs (это круто)

  • Это проблема. После того, как вы изменили содержимое второго DropDownList с помощью javascript, вы не можете сделать простую публикацию на своей странице, потому что ViewState не будет действительным , и вы увидите следующее исключение:

Недопустимый аргумент обратной передачи или обратного вызова.

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

Взгляните:

Итак, если вы хотите избавиться-вне всех ваших UpdatePanel элементов управления вам нужно будет заменить существующие серверные элементы управления на дружественные к JavaScript элементы управления.Также помните, что если вы сделаете это, вместо того, чтобы полагаться на механизм публикации страниц, вам придется использовать AJAX для выполнения операций на сервере, в противном случае вы получите исключение Недопустимый обратный вызов или обратный вызов. .Другими словами, было бы лучше рассмотреть возможность перехода на приложение MVC, если это возможно.

2 голосов
/ 29 июня 2012

Вы можете прочитать о готовящемся WebAPI в .NET 4.5. Он предназначен как для веб-форм, так и для MVC и может стать жизнеспособным решением вашей проблемы, если вы подождете 4.5.

Просто используйте его в сочетании с любым движком шаблонов jQuery.

http://weblogs.asp.net/scottgu/archive/2012/02/23/asp-net-web-api-part-1.aspx

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

Существует альтернатива UpdatePanels, но все еще использующие PageMethods.Это комбинация шаблонов jQuery и jQuery .Доказано, что он быстрее, чем UpdatePanels.Далее читайте на ресурсе ниже, где вы можете найти больше статей, посвященных этой теме.

http://encosia.com/use-jquery-and-aspnet-ajax-to-build-a-client-side-repeater/

1 голос
/ 28 июня 2012

Посмотрите на http://uframe.codeplex.com/

...