Использование шаблона JavaScript с ASP.NET - PullRequest
1 голос
/ 12 мая 2011

Я сталкивался с этой проблемой несколько раз за свою карьеру и так и не смог найти для нее элегантного решения.Представьте, что у вас есть простая страница с повторителем.Вы заполняете этот повторитель на стороне сервера через привязку данных.Это здорово, работает быстро и делает то, что должен.Но теперь вы хотите добавить paginator к этому повторителю или иначе изменить выход.Выполнение этого с помощью Ajax является предпочтительным способом обеспечения расширенного взаимодействия с клиентом.

Таким образом, вы создаете веб-сервис, который предоставляет вам данные в виде JSON, но теперь вы застряли ... Либо вам нужно написать сложный клиентна стороне кода, чтобы найти каждое поле, которое вам нужно изменить в каждом элементе повторителя, или вы должны уничтожить весь вывод ретранслятора на стороне сервера и создать новый HTML с нуля, или метод, который я использовалиспользуя в последнее время, возьмите первый повторяющийся элемент, сдуйте все остальное и клонируйте первый элемент столько раз, сколько вам нужно, и измените его поля.

Все описанные методы не оптимальны, потому что, несмотря ни на что,они требуют довольно много повторяющейся логики на стороне сервера (то есть шаблон в повторителе) и на стороне клиента (javascript для отображения данных JSON).Должен быть лучший, более простой способ сделать это.Первое, что приходит на ум, это вместо того, чтобы возвращать JSON с веб-сервера, возвращать HTML предварительно заполненного повторителя.Но для чего-то подобного я мог бы также использовать панель обновления ASP.NET AJAX.Результат не будет меньшим с автономным веб-сервисом.

Следующая вещь, о которой я подумал, это шаблоны JavaScript.Что, если будет какой-то способ взять необработанный шаблон повторителя на стороне сервера и преобразовать его в шаблон JavaScript, который может быть либо встроен на странице при загрузке, либо служить частью ответа веб-службы.Однако я не мог найти какие-либо существующие решения для чего-то вроде этого.И я не могу придумать простой способ сделать это сам.Любые идеи?

PS Визуализация шаблона JavaScript на стороне клиента при загрузке страницы и использование JavaScript для его заполнения без визуализации начального представления на сервере (без повторителя и привязки данных) не подлежит обсуждению.Я слишком беспокоюсь о производительности.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Во-первых, я не верю, что использование шаблона клиента с данными JSON даже при первой загрузке отрицательно скажется на производительности, если мы не говорим об устройствах с различными форм-факторами, таких как телефоны и т. Д.

Однако, если вам нужно использовать серверные шаблоны / рендеринг, то почему бы не заставить сервер возвращать html для ретранслятора. Это может быть сделано путем помещения логики повторителя в другой пользовательский элемент управления / страницу и обработки только этой страницы по запросу ajax. И это вовсе не эквивалентно использованию UpdatePanel (как указано вами) - UpdatePanel публикует данные всей страницы (включая состояние просмотра), имеющие больший размер запроса. Размер ответа также большой, потому что он должен содержать состояние просмотра. Также на стороне сервера использование UpdatePanel приводит к загрузке полного дерева управления данными состояния и обработке событий после возврата. Отправка только необходимого html - это гораздо лучший подход, который идеально подойдет вашим потребностям - единственная проблема заключается в том, что html будет больше по сравнению с JSON.

Наконец, есть несколько интересных проектов, таких как Script # - Script # преобразует код C # в java-скрипт. Вы можете создать нечто подобное (используя сам скрипт #) для преобразования шаблонного кода на стороне сервера в эквивалентный код JS. Более жизнеспособным подходом в подобных строках может быть использование шаблонов T4 для преобразования независимого от технологии шаблона в код на стороне сервера (разметка + код или чистый код) и эквивалентный JS-код.

0 голосов
/ 09 июля 2011

Подумав обо всех плюсах и минусах разных подходов, я остановился на следующем методе.Я создал пользовательский элемент управления ASP.NET, который может отображать HTML, однако, когда страница запрашивается с параметрами строки запроса, вместо того, чтобы просто выполнять стандартный рендеринг, он будет использовать Response.Clear () и Response.End () и вмежду этими двумя командами выводится версия данных в формате JSON на основе параметров строки запроса.Также при первом рендеринге страницы он также выведет шаблон JavaScript с использованием отражений для чтения имен переменных из области шаблона элемента управления.

Этот метод отлично работает, все, что мне нужно сделать, это сбросить мой элемент управленияна странице данные связывают его, и он работает как настоящая сетка AJAX, которая поддерживает разбиение на страницы, сортировку и фильтрацию.Однако у этого есть ограничение.В шаблоне элемента управления вы можете указывать только переменные, а не выражения.В противном случае отражения не могут преобразовать его в переменную JavaScript.Но я могу с этим смириться.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...