Метод на стороне сервера и на стороне клиента

Я использую ASP.NET с C # 2.0. Я создал несколько объектов для базы данных, и каждый из этих объектов имеет свойства, которые могут вызываться изначально или вызываются аналогичным образом, и на их основе создается RESTful JSON API.

У меня много Вещи, похожие на вкладки, я люблю называть на этом сайте «модулями» - функция модуля заключается в преобразовании данных в HTML для отображения на странице. В идеале это необходимо сделать в коде C # на стороне сервера для загрузки первой вкладки, а затем использовать Ajax для загрузки остальных при щелчке вкладок, однако для старых браузеров и поисковых систем вкладка по-прежнему является ссылкой, которая загружает тот же код HTML на стороне сервера.

В настоящее время я пишу код JavaScript полностью отдельно от кода C #, который преобразует каждый модуль в HTML, но метод практически тот же, только другой язык. Подобно этому примеру.

Код C #

public override string GetHtml()
{
    IJsonObjectCollection response = ((Village)page).People;
    string html = "
"; foreach (Person person in response) { html += "
"; html += person.Name; if(canEdit) html += "*"; html += "
"; } return html + "
"; }

Код JavaScript

function getHtml() {
    JsonRequest('/json/villages/1/people', function(response) {
        var html = '
'; for (int i = 0; i < response.length; i++) { var person = response[i]; html += '
'; html += person.name; if(canEdit) html += '*'; html += '
'; } return html + '
'; }); }

Вероятно, вы видите, к чему я клоню с этим вопросом. Что было бы наиболее эффективным способом сделать это? Я думал о нескольких альтернативных вариантах -

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

2. Напишите свой собственный язык сценариев, который можно интерпретировать как C #, но также «скомпилировать» в код JavaScript.

3. Просто напишите все на C # и используйте Ajax, чтобы просто запросить HTML-контент с C #

4. Храните код отдельно и напишите каждый метод дважды.

Я хотел бы, чтобы со временем другие разработчики могли писать эти «модули», так что, может быть, вариант 2 будет лучшим вариантом?

6
задан Peter Mortensen 7 June 2011 в 11:53
поделиться