Использование Inline С# внутри файла Javascript в MVC Framework

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

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

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

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

Ответ 1

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

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

Добавлен как ответ SLaks:

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

Помните, что вы не получите IntelliSense для него в VS.

Ответ 2

.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

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

Задайте тип содержимого text/javascript и сразу поставьте исходный код JavaScript ниже директивы <%@ Page (без тега <script>).

Помните, что вы не получите IntelliSense для него в VS.

Ответ 4

Чтобы добавить к Grant ответ Вагнера и ответ 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> при выполнении.

Ответ 5

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

Ответ 6

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

Ответ 7

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

Здесь приведен полный пример: fooobar.com/questions/389424/...

Ответ 8

когда у вас есть код С# в отдельном файле и включайте его в свой вид. Сервер не обрабатывает код, файл script будет вызываться браузером, а встроенный script будет рассматриваться как простая строка

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

Ответ 9

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