Использование 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".