Я полагаю, что все пытались использовать JavaScript в представлении, и вы можете напрямую использовать синтаксис бритвы, чтобы вызвать некоторые методы .NET. Поскольку следующий код вложен в представление бритвы:
<script> var currdate = '@datetime.now'; // напрямую вызовите метод .NET Console.log (currdate) </script>
Но другая ситуация заключается в том, что если я хочу использовать Razor в отдельном файле JS, приведенный выше метод не будет работать, потому что MVC не будет напрямую интерпретировать файл JS, и его можно помещать только в представление бритвы. Тем не менее, здесь я рекомендую вам стороннюю библиотеку, которая позволяет вам использовать Razor напрямую в независимых файлах JS
Название этой библиотеки - Razorjs. Это проект с открытым исходным кодом. Вы можете скачать исходный код с следующего адреса:
https://bitbucket.org/djsolid/razorjs
Или вы можете установить его прямо через Nuget:
PM> Install-Package Razorjs
Хорошо, давайте поговорим о том, что эта библиотека может принести нам первым. После установки вы можете напрямую использовать все методы, поддерживаемые .NET в файле JS. Например, приведенный выше код может быть непосредственно размещен в независимом файле JS для использования. Кроме того, вы также можете ссылаться на полное пространство имен .NET в файле JS. Если вы хотите вызвать объект файла, чтобы прочитать содержимое текстового файла, вы можете напрямую обратиться к пространству имен System.io:
@using System.io; var s = 'hello at @datetime.now /n @file.readalltext (system.web.hosting.hostingenvironment.mappath ("~ /web.config")))';После запуска вы можете напрямую получить все содержимое в файле web.config в JS. Это выглядит довольно хорошо, ха -ха. Так как именно работает этот тип библиотеки? Фактически, он использует библиотеку классов под названием Razorengine для достижения вышеуказанных эффектов. RazorEngine - это очень мощный двигатель по объяснению бритвы, и я раньше использовал его в некоторых проектах. Через этот двигатель вы можете даже использовать синтаксис бритвы непосредственно в форме победы. Ха -ха, мне интересно, есть ли у вас представление о его преимуществах?
Ну, хорошо, с этим двигателем вы можете использовать бритву MVC в совершенно независимой веб -среде. Эта функция позволяет вам сделать несколько гибких шаблонов очень удобно, например, некоторые шаблоны электронной почты. Вы можете напрямую использовать различные методы .NET или даже пользовательские объекты в шаблоне, а затем динамически генерировать желаемый контент. Хорошо, но этот двигатель не то, что я хочу представить на этот раз, я просто говорю об этом здесь
Далее, давайте поговорим об использовании Razorjs. Если вы установите его непосредственно через Nuget, вы автоматически настроите Web.Config для вас. Это рекомендуемый метод установки. В противном случае вы должны добавить конфигурацию в web.config самостоятельно. Есть несколько мест, и я не буду вдаваться в подробности здесь. Вы можете сравнить его после установки. Также очень просто использовать Razorjs, просто см. Файл JS, который вы хотите, с помощью следующего синтаксиса:
<p> @html.razorjsinline ("~/scripts/example.js") </p>Тем не менее, можно отметить, что в вашем Web.config будет каталог, который позволяет использовать Razorjs, то есть ваш файл JS должен быть размещен в этом каталоге, прежде чем вы сможете использовать этот метод для ссылки:
<razorjssettings handlerpath = "~/razorjs.axd"> <AltingPaths> <add path = "~/scripts"/> </outedpaths> </razorjssettings>
Последнее, о чем я хочу поговорить, это его ограничения. Есть хорошие и плохие стороны. Поскольку он использует Razorengine, вы не можете использовать HTML -вспомогательный метод MVC в JS, то есть все методы, начинающиеся с @HTML. Другая проблема заключается в том, что он не может распознать код комментариев в JS. То есть, если вы используете методы .NET в комментариях, это также будет выполнено. Если ваш метод верен, проблем не будет. В противном случае, выполнение JS будет прервано, и ошибка будет сообщена напрямую. Так что не думайте, что бесполезного метода достаточно, чтобы прокомментировать.
Что касается проблемы, связанной с тем, чтобы не было возможности выполнить @html Helper, я предоставляю здесь другое решение, но это позволяет вам изменить его исходный код. Друзья, которые хотят бросить, могут попробовать. На самом деле, вы можете использовать множество пользовательских методов для этого, что является более гибким и удобным. После загрузки исходного кода Razorjs вы можете напрямую изменить его на нем и перекомпилировать DLL. Другой способ - использовать его исходный код в качестве другого проекта и напрямую добавить его в свой собственный проект.
В своем исходном коде откройте файл htmltemplatebase.cs, и вы можете добавить здесь свои собственные методы, а затем все добавленные здесь методы могут быть вызваны непосредственно в JS. Если вы можете найти инкапсулированный метод HREF в исходном коде, вы можете преобразовать URL в URL -адрес, доступный для запрашивающего клиента. Согласно этим методу написания, мы можем добавить наши собственные методы, например, мой метод для инкапсуляции динамически получения международных файлов ресурсов, чтобы мы могли напрямую использовать файлы ресурсов .NET в JS для интернационализации:
Общедоступный класс htmltemplatebase: Templatebase {// вручную вызовать диспетчер ресурсов. public htmltemplatebase () {url = new urlhelper (httpcontext.current.request.requestcontext); } public String hRef (string riginalUrl) {return extensions.resolveurl (OriginalUrl); } public String getLangText (String langkey) {return -связанный язык на основе ресурсов возврата ключей.getString (langkey); } public urlHelper url {get; набор; }}Тогда позвоните прямо в JS:
var s = '@getlangtext ("coderblog")'; console.log (s);После запуска вы можете напрямую ввести содержание ключа Coderblog в JS.