Использование Inline C# в файле Javascript в MVC Framework

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

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

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

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

9 ответов

Решение

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

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

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

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

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

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

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

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

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

Файлы.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"));
});

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

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

Полный пример ответа здесь: /questions/26482890/dostup-k-svojstvu-modeli-v-fajle-javascript/26482910#26482910

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

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

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

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

Другие вопросы по тегам