Метод на стороне сервера и на стороне клиента - PullRequest
6 голосов
/ 07 июня 2011

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

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

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

код C #

public override string GetHtml()
{
    IJsonObjectCollection<Person> response = ((Village)page).People;
    string html = "<div id=\"test\">";
    foreach (Person person in response)
    {
        html += "<div class=\"person\">";
        html += person.Name;
        if(canEdit) html += "*";
        html += "</div>";
    }
    return html + "</div>";
}

код JavaScript

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Пара предложений.

  • Есть общий метод GetHtml, который отражает HTML.Это может быть сложно, поскольку пользовательский интерфейс не является чем-то, что легко и единообразно сопоставляется с полями данных.
  • Получите мета-описание ваших «модулей», используйте его для создания общих методов GetHtml
  • Наконец попробуйте : это позволит вам просто создавать методы JavaScript, затем вы можете вызывать их из C #

Я бы выбрал второй вариант описания мета, так как это то, что я делаюдля моих слоев данных.У меня в основном есть файл, определяющий мою модель домена.Я использую это для генерации всех моих документов доступа к данным, файлов конфигурации nhibernate и т. Д. Затем у меня есть файл метаданных, который добавляет информацию к этим объектам, такую ​​как информация рендеринга пользовательского интерфейса и информация о проверке полей.

Tnx

Гвидо

1 голос
/ 07 июня 2011

Я бы отказался от варианта 4, так как это усложнит обслуживание, и вы можете потерять синхронизацию между HTML-кодом, сгенерированным с помощью Javascript, и HTML-кодом из кода C #.Я также отказался бы от варианта 2, так как это может сделать код более сложным для других разработчиков, а также, вероятно, излишним.

Я определенно сгенерирую HTML в одном месте и, вероятно, предоставлю RESTful HTML API, который использует существующую функцию C #вернуть фрагменты HTML.Итак, из вашего Javascript вы бы назвали:

function getHtml() {
    MyHtmlRequest('/html/villages/1/people', function(response) {
        var html = response.Text;
        return html;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...