любые идеи, чтобы избежать дублирования кода в C # и JavaScript - PullRequest
9 голосов
/ 18 января 2010

У меня есть веб-сайт asp.net mvc, на котором я создаю большую часть страницы, используя C #, например, создавая таблицы html, используя набор данных из моей модели представления

У меня также есть много javascript, который затем динамически изменяет эти таблицы (например, добавьте строку).

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

Каждый раз, когда я изменяю код c # на добавление нового поля, я должен не забывать возвращаться к коду JavaScript, чтобы сделать то же самое.

есть ли лучший способ здесь?

Ответы [ 3 ]

8 голосов
/ 18 января 2010

Один из способов сделать это - представить логику, которая генерирует разметку как веб-сервис на вашем сервере, и заставить JavaScript получать эту разметку с помощью вызова AJAX, а не дублировать логику.

Таким образом, вы можете вызвать что-то вроде CreateRow метода из JavaScript, который фактически вызовет ту же самую логику, которую вы использовали на сервере при рендеринге страницы.

0 голосов
/ 22 декабря 2010

Вопреки общепринятому и популярному ответу @Andrew Hare. Я предпочел бы реализовать генерацию разметки только в javascript (и использовать ее повторно для построения таблиц HTML), чем реализовывать разметку только в C # (если javascript, конечно, тоже нуждается в этой функциональности).

Потому что:

  1. Javascript лучше, чем C # для HTML, потому что он может изменять уже обработанный DOM. Таким образом, с Javascript вы можете сделать гораздо больше, чем просто статический HTML. И, может быть, вам это сейчас не нужно, но в наши дни нередки требования, которые направлены на то, чтобы приложение стало более похожим на многофункциональное интернет-приложение.
  2. Вызовы AJAX, скорее всего, будут медленнее, чем худшая реализация Javascript, которая обрабатывает данные на стороне сервера и преобразует их в новые строки существующей таблицы. А также медленнее, чем создание таблицы с нуля в Javascript.
  3. Меньше запросов к серверу (и больше требований на стороне клиента, но обычно это не проблема).
  4. Есть несколько очень хороших Javascript-фреймворков, которые создают действительно хорошие таблицы (и многое другое).

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

Потому что расширение ваших функций Javascript для создания всей таблицы, если вы уже создаете строки, не должно быть таким сложным, как мне кажется. Вот идея о том, как передать данные в Javascript и затем использовать функцию «createRow», которую вы уже используете в Javascript:

<script>
    var data = [];
    <% foreach (var item in Model) { %>
        data.push({
            Id: <%= Html.Encode(item.Id) %>
            , Title: <%= Html.Encode(item.Title) %>
        });
    <% } %> 
    createTableHeader();
    for (var i = 0; i < data.length; i++) {
        createRow(data[i]);
    }
    createTableFooter();
</script>
0 голосов
/ 18 января 2010

Посмотрите на статью Скотта Гу: ASP.NET MVC 2: проверка модели

По сути, вы определяете проверки на уровне свойств модели, и ASP.NET MVC 2 также может автоматически генерировать правильную проверку на стороне клиента.

К сожалению, это может означать, что вам придется все реорганизовать в MVC, но многие из них здесь, вероятно, посчитают это плюсом.

(отказ от ответственности: я вообще не работал с ASP.NET MVC)

...