Параметры страницы ASP.NET с соответствующей разметкой на стороне клиента и на стороне сервера? - PullRequest
13 голосов
/ 18 октября 2010

Предположим, я создаю клон StackOverflow с использованием веб-форм ASP.NET и jQuery.Страница вопросов имеет вопрос, несколько ответов и комментарии под каждым.Требования:

  1. Пользователи могут публиковать новые ответы и комментарии, а также редактировать существующие без обратной передачи.
  2. Нет UpdatePanels;вызовы AJAX извлекают только нужный им JSON, а не фрагменты HTML.
  3. Страница загружается со всеми существующими ответами и комментариями на месте (для чтения страницы не нужно запускать javascript).

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

Какие у меня варианты?

Ответы [ 7 ]

1 голос
/ 10 ноября 2010

Я не знаю, является ли это потенциальным вариантом, но это становится относительно тривиальным с использованием ASP.net MVC.Например, у вас есть частичное представление об ответе, и это часть разметки на странице.Затем у вас также есть действие на вашем контроллере, которое принимает, например, идентификатор ответа, который просто возвращает визуализированный html из этого частичного представления, которое затем можно вставить в документ.мест и найти это очень чистый метод.

1 голос
/ 10 ноября 2010

Хотя это не совсем то, что вы просили, вы можете рассмотреть рендеринг HTML на сервере через службу (без использования панели обновления) и отправку его клиенту вместо использования шаблонов клиента. Это не может быть так плохо, потому что Facebook делает это: http://www.facebook.com/video/video.php?v=596368660334 Если это подходит в вашей ситуации, зависит от того, насколько богата ваша разметка и какой процент данных, передаваемых по сети, будет разметкой по сравнению с контентом.

1 голос
/ 04 ноября 2010

Он не использует jQuery, но механизм просмотра Spark предоставляет класс JavascriptViewResult, который позволяет отображать шаблоны на клиенте и на сервере.Это предназначено для конкретной ситуации, которую вы описываете.См. этот пост К. Скотта Аллена для простого объяснения того, как это работает.

Затем вы можете использовать одну и ту же страницу просмотра на сервере и клиенте.На сервере вы передаете объект viewmodel в представление, а на клиенте вы передаете ему объект JSON.Вы даже можете включить код в свои представления, если он является допустимым кодом для языков C # и JavaScript.Например, var x = 1; будет компилироваться как в C #, так и в Javascript.

0 голосов
/ 11 ноября 2010

Отключите все элементы управления в ASP.NET и используйте только разметку HTML с Javascript и CSS.

ASP.NET абстрагирует уровень представления от разработчиков, однако хорошей новостью является то, что вам не нужно использовать веб-элементы управления для создания красивого веб-сайта с использованием .NET. Читайте далее в посте: « не выбрасывайте ребенка (.NET) с водой для ванны (ASP.NET) ».

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

Сохраняйте простоту при динамическом добавлении разметки, чтобы ваша страница автоматически загружалась с контентом, например:

<% foreach (Post post in PostList) { %>
<h2><%= post.Title %></h2>
<p><%= post.Content %></p>
<% } %>

По сути, сводите средний уровень к минимуму (например, используя ashx «Generic Handlers» вместо aspx «Pages», где это возможно), если вы не хотите, чтобы вас начинали путать с бесполезной разметкой ASP.NET и добавлением вредоносных программ, таких как ViewState.

0 голосов
/ 09 ноября 2010

Почему бы просто не использовать шаблон HTML-файл и загрузить его из JavaScript и с сервера? В JavaScript вы получаете шаблон HTML один раз для всех элементов, на которых он используется (сохраняйте его в переменной или чем-то еще).

Затем вы можете выполнять замену строк в обоих, и вы можете использовать только одно место для обновления HTML.

0 голосов
/ 05 ноября 2010

Вы можете использовать String.format метод JavaScript, который определен в скриптах, загруженных ScriptManager (или искать альтернативную реализацию здесь ).Это аналог метода String.Format .Net.

string CommentTpl = "<div class='comment {0}'>{1}</div>";

С помощью String.format вы можете отобразить этот шаблон как на клиенте, так и на сервере.Только не забудьте правильно избежать этого для JavaScript.

0 голосов
/ 04 ноября 2010

Вы можете использовать javscriptdotnet в комбинации с embeddedjs

Таким образом, вы сможете использовать одни и те же шаблоны в обоих местах.

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

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