Генерация JavaScript с шаблонами в ASP.Net - PullRequest
2 голосов
/ 04 июня 2009

У меня есть потребность в генерации JavaScript на сервере. Я могу сделать это с помощью ASPX-страниц для шаблонирования JavaScript, но я получаю предупреждения и не получаю пользу от подсветки синтаксиса, которая мне бы хотелось. Есть ли способ сообщить среде .Net / Visual Studio, что определенная страница ASPX должна выводить не-HTML текст?

Причиной этого является локализация. Мои локализованные строки поступают с сервера, и они нужны мне в конструкциях JavaScript на страницах. Самый простой способ, которым я придумал, - это иметь один файл JS (сейчас я назову его l18n.js), который определяет локализованные строки в объекте JSON.

l18n = {
    OK: <%= GetString("OK") %>,
    Cancel: <%= GetString("Cancel") %>,

    ConfirmDialog: {
        Title: <%= GetString("ConfirmTitle") %>,
        Message: <%= GetString("ConfirmMessage") %>
    }
    // .. etc.
}

Это позволяет мне использовать локализованные строки в других частях пользовательского интерфейса

var okButton = $('<button>' + l18n.OK + '</button>')

Но, как уже говорилось, простое добавление JavaScript на страницу ASPX, l18n.js.aspx, приводит к предупреждениям и не обеспечивает подсветку синтаксиса. Есть ли лучший способ, который хотя бы избавился от предупреждения? Текущий -

Сбой при создании файла конструктора: исключение из HRESULT: 0x80042929

И в случае, если это имеет значение, проект построен на основе .Net 2.0

Разъяснение

Язык не выбран пользователем, поэтому он не должен меняться все время, и я должен иметь возможность использовать значение языка в качестве ETag, поэтому кэширование не должно быть такой большой проблемой. С точки зрения браузера, я считаю шаблонный JS статическим файлом, как и остальные файлы. Я просто не хочу объявлять ~ 10 статических файлов JS отдельно, если я могу автоматизировать это.

Ответы [ 3 ]

2 голосов
/ 04 июня 2009

ASPX - это форма ASP.NET. Ожидается, что он представляет веб-форму, с которой пользователь может взаимодействовать, выполняя дополнительный код в ASPX. Следовательно, жизненный цикл ASPX представляет большую часть этого.

Для необработанного вывода, такого как JS, вы должны использовать ASHX, который не имеет всех этих накладных расходов форм.

В вашем конкретном случае я хотел бы создать набор классов, которые можно сериализовать как JSON. Отправьте сериализованный JSON как вывод вашего ASHX.

1 голос
/ 04 июня 2009

Вы также можете загрузить все текущие языковые элементы страниц в «глобальные» переменные (константы) вверху каждой страницы в блоке скрипта.

var LANG_OK = 'ok string';
var LANG_CANCEL = 'cancel string';
var LANG_CONFIRM_TITLE = 'title string';
var LANG_CONFIRM_MESSAGE = 'message string';

Это удерживает динамическую часть от вашего файла JavaScript. Это означает, что файлы javascript статичны, как и должно быть.

обновление

Вы можете рассмотреть возможность создания репозиториев javascript для каждого языка на основе моего решения выше.

  • language_EN.js
  • language_NL.js
  • language_FR.js

Это будет означать, что вам просто нужно выбрать, какой файл включить на странице:

<% Response.Write "<script type='text/javascript' src='/js/language_" & User.LanguageCode & ".js'></script>" %>
0 голосов
/ 04 июня 2009

Вы могли бы создать элемент управления (.ascx), который состоит из блока скрипта?

Чтобы получить jquery intellisense, сделайте что-то вроде этого (это для asp.net mvc, но что-то подобное должно работать и для классификации asp.net):

<% if (false)
   { %>

<script src="../../Static/Scripts/jquery-1.3.2.js" type="text/javascript"></script>

<% } %>
...