Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Можно ли написать такую функцию, которая будет вызываться из JS и из C#

#javascript #c_sharp #aspnet_mvc #razor


Я пишу на C# в Asp.Net MVC. У меня есть различные компоненты: диалоговое окно, прогресс
бар, спойлер и т.д. Я их добавляю с помощью html хелперов, но также мне их часто приходится
добавлять на страницу динамически из JS,  . 

Мне не нравится то, что я дублирую код с C# в JS. Можно ли это как-то исправить? 
Написать такую функцию, которая будет вызываться и из JS и из C#.

Возможно есть какой-нибудь компилятор, который компилит TypeScript одновременно и
в JS и в C#? Или какие-нибудь другие способы?  
    


Ответы

Ответ 1



Единого языка для клиента и сервера в случае ASP.NET MVC нет. Такой бонус на проверенных временем платформах существует только для JavaScript в форме Node.js (собственно, киллер фича сей штуковины). Для .NET есть разной степени сырости компиляторы JS. На данный момент активно развивается Blazor, полагающийся на Mono и WebAssembly для написания SPA полностью на C#. Но вообще есть компиляторы для JS на базе DLR и наоборот компиляторы из IL в JS, которые просто позволят выполнить JS в рантайме .NET или наоборот безо всяких революций. Вариантов много, сам не пользовался, так что с выбором конкретного компилятора не помогу.

Ответ 2



Можно использовать Microsoft Script Control Library для выполнения Javascript на сервере. Правда, она на самом деле выполняет JScript, а не Javascript, но суть та же. Чтобы это работало, группа приложений в IIS должна быть настроена на работу в 32-битном процессе. //Reference: COM -> Microsoft Script Control Library public static string ExecuteJS(string code,string function,params object[] argv) { MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl(); sc.Language = "JScript"; sc.AddCode(code); object result = sc.Run(function, argv); return result.ToString(); } Использование на сервере: public const string MyFunction = "function PrintSum(a,b){return a+' + '+b+' = '+(a+b);};"; public static string Func() { return ExecuteJS(MyFunction,"PrintSum",1.1,2.2); } Использование на клиенте:

Комментариев нет:

Отправить комментарий