Использование Inline C # в файле Javascript в MVC Framework - PullRequest
13 голосов
/ 25 июня 2009

Я пытаюсь заставить встроенный C # работать с моими файлами JavaScript, используя MVC Framework. Я сделал этот маленький тестовый код.

$(document).ready(function() {
    alert(<%= ViewData["Message"] %>);
});

Когда этот код используется внутри представления, он работает отлично. Когда я выхожу из моего представления aspx и пробую это в файле JavaScript, я получаю недопустимый символ XML Я полагаю, что это сделано в MVC Framework, но мне не удалось найти какой-либо материал по этому вопросу в Интернете.

Кто-нибудь получил встроенный C # для работы с файлами JavaScript с использованием MVC Framework?

Ответы [ 9 ]

14 голосов
/ 25 июня 2009

Как уже говорили другие, C # не обрабатывается сервером.

Возможным решением было бы иметь отдельное представление, которое использует ту же модель и выводит JavaScript, а затем ссылаться на это представление в вашем <script type="text/javascript" src="yourJSview.aspx"></script>.

Добавлено согласно SLaks 'ответ :

Установите тип контента на text/javascript и поместите ваш источник JavaScript непосредственно ниже директивы <%@ Page (без тега <script>).

Остерегайтесь, что вы не получите IntelliSense для него в VS.

4 голосов
/ 16 июля 2010

Чтобы добавить к Гранту ответ Вагнера и ответ SLaks , вы можете фактически обмануть Visual Studio, предоставив вам IntelliSense в своем решении, например:

<%if (false) {%><script type="text/javascript"><%} %>
// your javascript here
<%if (false) {%></script><%} %>

В его решении требуется, чтобы при отображении на странице отсутствовали теги <script>, но это имеет побочный эффект, который отключает JavaScript IntelliSense в Visual Studio. С учетом вышесказанного Visual Studio предоставит вам IntelliSense и в то же время не будет отображать теги <script> при выполнении.

4 голосов
/ 25 июня 2009

Вы можете создать представление ASPX, которое отображает JavaScript.

Установите тип контента на text/javascript и поместите ваш источник JavaScript непосредственно ниже директивы <%@ Page (без тега <script>).

Остерегайтесь, что вы не получите IntelliSense для него в VS.

4 голосов
/ 25 июня 2009

.aspx файлы - это файлы представления инфраструктуры MVC. Каркас предоставляет только виды и частичные виды. Я не думаю, что был бы способ использовать серверный код в файлах JavaScript.

Вы можете включить свое сообщение в скрытое поле

<%-- This goes into a view in an .aspx --%>
<%= Html.Hidden("MyMessage", ViewData["Message"]) %>

и используйте это в вашем файле JavaScript:

// This is the js file
$(document).ready(function() {
    alert($("#MyMessage").attr("value"));
});
3 голосов
/ 25 июня 2009

Этот встроенный C # должен быть обработан сервером, чтобы иметь смысл. Естественно, он не будет работать с простым JavaScript-файлом.

2 голосов
/ 25 сентября 2013

Это старый вопрос, но для тех, кто в будущем наткнется на Google, лучшее решение - использовать атрибуты data- * для передачи переменных. Можно использовать скрытый элемент, но вы также можете использовать сам тег <script> и присвоить ему уникальный идентификатор.

Полный пример ответа здесь: https://stackoverflow.com/a/18993844/1445356

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

Ваш веб-сервер не обрабатывает файлы .js, он только передает их клиенту. Это в отличие от .aspx или других типов файлов ASP.NET. Эти файлы интерпретируются вашим сервером до того, как они будут переданы клиенту.

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

если у вас есть код C # в отдельном файле и вы включили его в свой View the Server, код не обрабатывает код, файл сценария будет вызываться браузером, а встроенный сценарий будет обрабатываться как простая строка

в качестве альтернативы вы можете попробовать скрипт runat = server при включении файла скрипта, но я не уверен насчет эффектов этого

0 голосов
/ 26 августа 2009

Я согласен с Серхатом. Лучше всего визуализировать скрытое поле HTML или, как упоминал Ал, перейти к нему по URL. Это можно сделать с помощью веб-службы или даже реализации IHttpHandler. Тогда вы можете использовать URL-адрес, такой как "messages.axd? Id = 17".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...