Параметры страницы ASP.NET с соответствующей разметкой на стороне клиента и на стороне сервера?
Предположим, что я создаю клон StackOverflow с использованием webforms ASP.NET и jQuery. На странице вопросов есть вопрос, несколько ответов и комментарии по каждому. Требования:
- Пользователи могут публиковать новые ответы и комментарии и редактировать существующие, без обратной передачи.
- Нет UpdatePanels; AJAX-вызовы восстанавливают только JSON, в котором они нуждаются, а не фрагменты HTML.
- Страница загружается со всеми существующими ответами и комментариями на месте (javascript не должен запускаться для чтения страницы).
То, что я пытаюсь понять, - это сделать это, не имея необходимости поддерживать два набора разметки (которые привязаны к клиенту с использованием какой-либо формы шаблона jQuery и привязки к серверу с использованием традиционных WebForms).
Каковы мои варианты?
Ответы
Ответ 1
В то время как это не совсем то, что вы просили, вы можете рассмотреть возможность рендеринга HTML на сервере с помощью службы (не используя панель обновления) и отправки ее клиенту вместо использования клиентских шаблонов. Это не может быть так плохо, потому что Facebook делает это:
http://www.facebook.com/video/video.php?v=596368660334
Если он подходит в вашей ситуации, зависит от того, насколько богата ваша разметка и какой процент данных, отправленных по проводу, будет разметкой, а не содержимым.
Ответ 2
Он не использует jQuery, но механизм Spark предоставляет класс JavascriptViewResult
, который позволяет отображать шаблоны на клиенте а также на сервере. Это предназначено для конкретной ситуации, которую вы описываете. См. этот пост К. Скотта Аллена для простого объяснения того, как это работает.
Затем вы можете использовать ту же страницу просмотра на сервере и клиенте. На сервере вы передаете объект viewmodel в представление, а на клиенте вы передаете ему объект JSON. Вы даже можете включать код в свои представления, если он действительный код для языков С# и JavaScript.
Например, var x = 1;
будет компилироваться как в С#, так и в Javascript.
Ответ 3
Я не знаю, является ли это потенциально опцией, но это становится относительно тривиальным с использованием ASP.net MVC. Например, у вас есть частичный вид ответа, и это часть разметки на странице. Затем у вас также есть действие на вашем контроллере, который принимает, например, идентификатор ответа, который просто возвращает отображаемый html из этого частичного представления, который затем может быть помещен в документ.
Я использовал это в нескольких местах и считаю, что это очень чистый метод.
Ответ 4
Вы можете использовать javscriptdotnet в комбинациях с embeddedjs
Таким образом, вы сможете повторно использовать те же шаблоны в обоих местах.
Лично я считаю, что это, как правило, перебор. Вы будете вводить множество зависимостей, которые трудно справиться.
Ответ 5
Вы можете использовать метод String.format
JavaScript, который определен в сценариях, загружаемых ScriptManager (или искать альтернативную реализацию здесь). Это аналог метода String.format
.Net.
string CommentTpl = "<div class='comment {0}'>{1}</div>";
С помощью String.format
вы можете отобразить этот шаблон как на клиенте, так и на сервере. Просто не забудьте правильно избежать его для JavaScript.
Ответ 6
Почему бы просто не использовать файл шаблона html и не загружать его с JavaScript и с сервера? В JavaScript вы получаете шаблон HTML один раз для всех элементов, на которых он используется (сохраняйте его в переменной или что-то в этом роде).
Затем вы можете выполнить замену строк в обоих случаях, и вы можете использовать только одно место для создания обновлений HTML.
Ответ 7
Удалите все элементы управления в ASP.NET и используйте только разметку HTML с Javascript и CSS.
ASP.NET абстрагирует уровень презентации от разработчиков, однако хорошая новость заключается в том, что вам не нужно использовать веб-элементы управления для написания красивый сайт с использованием .NET. Продолжайте читать дальше: " не бросайте ребенка (.NET) с водой для ванны (ASP.NET).
Вы все равно можете сохранить .NET для передачи бит информации между интерфейсом и базой данных (используя JSON not Postbacks) и обрабатывать другие биты логики, такие как безопасность и логин, которые не могут обрабатываться клиентом.
Держите его простым, все еще добавляя разметку динамически, чтобы ваша страница загружалась с контентом автоматически, например:
<% foreach (Post post in PostList) { %>
<h2><%= post.Title %></h2>
<p><%= post.Content %></p>
<% } %>
В основном, сохраните средний уровень до минимума (например, используя ashx "Generic Handlers" вместо aspx "Pages", где это возможно), если вы не хотите путать с бесплатной разметкой ASP.NET и добавлением вирусов, таких как ViewState.