Я успешно создал веб-приложение mvc / razor, которое возвращает файлы css, которые были проанализированы бритвой. Каждый раз, когда есть фоновое изображение, у меня есть фрагмент бритвы, который записывает префикс URL в имя файла изображения. CSS теперь выглядит так:
body { background-image: url(@LookupUrl.Image("background.gif")); }
Css-файлы теперь работают нормально, и я перешел к попытке заставить файлы javascript .js функционировать таким же образом, но они не играют в мяч.
Код идентичен коду CSS и он успешно находит файл .js, но бритва, кажется, анализирует его по-другому. Вот пример файла js:
function testFunction() { alert('test function hit!'); }
testFunction();
Razor, кажется, думает, что это код, который он должен скомпилировать, и выдает ошибку:
Compiler Error Message: JS1135: Variable 'alert' has not been declared
> Source Error:
>
> Line 1: function testFunction() {
> Line 2: alert('test function
> hit!'); Line 3: } Line 4:
> testFunction();
После переименования того же файла в .css он работает нормально.
Есть ли способ заставить бритву работать с файлами .js так же, как и для .css?
Вот как я зарегистрировал обработчики файлов для бритвы:
RazorCodeLanguage.Languages.Add("js", new CSharpRazorCodeLanguage());
RazorCodeLanguage.Languages.Add("css", new CSharpRazorCodeLanguage());
WebPageHttpHandler.RegisterExtension(".js");
WebPageHttpHandler.RegisterExtension(".css");
Поставщик сборки зарегистрирован в PreApplicationStart с помощью метода, описанного Haacked в его сообщении в блоге .
Нужно ли удалять обработчик, который mvc добавляет для файлов .js?
ОБНОВЛЕНИЕ 2 дня
Хотя я начал работать так, как хотел, я не рекомендовал бы этот метод другим. Использование Razor для синтаксического анализа css / javascript некорректно без использования - простота использования бритвы с помощью @ ampersand все портит. Рассмотрим CSS3 @ font-face. Бритва нажимает на @ и думает, что должна использовать его как функцию. То же самое может случиться с javascript, и произошло с Jquery 1.5.1.
Вместо этого я, вероятно, вернусь к веб-формам aspx для динамического css / javascript, где меньше шансов появления блоков кода <%%> естественным образом.