Выполните код C# внутри функции JavaScript, когда она вызывается

#javascript #c# #asp.net-core #razor-pages

Вопрос:

Я хочу выполнять фрагмент кода C# всякий раз, когда я запускаю функцию JavaScript, но, похоже, он ведет себя не так, как я хочу. Вот пример:
Допустим, у меня есть переменная property int Counter {get; set; } в модели, которую я хочу увеличивать каждый раз, когда я запускаю функцию JavaScript:

 <script type="text/javascript">

function MyFunction(){

    //Do some stuff
    @{Model.Counter  ;}

}

</script>
 

На самом деле происходит то, что при загрузке страницы @{Model.Counter ;} выполняется независимо от того, вызывается ли она не из функции.
И всякий раз, когда я снова запускаю функцию, она полностью игнорирует ее.
Это означает, что этот фрагмент кода @{Model.Counter ;} выполняется один раз при загрузке страницы и никогда больше.
Как это исправить и заставить его выполняться каждый раз, когда я запускаю функцию?

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

1. JavaScript = Клиент, C# = Сервер

2. Razor-это не какой-то способ смешивать серверный C# с клиентским javascript. Вместо этого он использует серверную часть C# для создания html( js), который будет отправлен в браузер. Если вы проверите свою страницу в браузере, вы не увидите никакого C# (там будет функция myFunction, но она будет пустой).

3. Если вы не слишком углубились в свой проект, вы могли бы намного приблизиться к тому, что вы пытаетесь сделать с Blazor, который действительно запускает c# (вроде…) в браузере. Шаблон по умолчанию даже поставляется со встречным примером.

4. Хорошо, я думаю, что понял, вы правы, на стороне клиента нет кода C#. Я все еще новичок в ASP.NET, извините за очевидную ошибку и спасибо за ваш ответ.

5. @Crowcoder Я делаю проект для своего университета, и мой доктор хочет, чтобы мы придерживались C#, Javascript, CSS, HTML. 🙁 Но, возможно, я взгляну на это в будущих целях, спасибо.

Ответ №1:

Вы можете использовать элемент управления ActiveX для выполнения скомпилированной программы. но вы должны знать, что ваш html-код будет работать только в IE.

Ответ №2:

Вам нужно будет создать скрытое поле для model.counter где-нибудь внутри формы представления

 <input type="hidden" id="modelCounter" asp-for="Counter" value="@Model.Counter" />
 

после этого вы можете изменить счетчик с помощью javascript

 function MyFunction(){

    //Do some stuff

var counter=$("#modelCounter").val();
counter  ;
   $("#modelCounter").val(counter);

}
 

Ответ №3:

Я не думаю, что то, чего вы хотите, возможно (может быть, с Блейзором? — но это веб-сборка). Вместо этого вы можете назначить новую переменную javascript свойству модели. Например.:

 <script type="text/javascript">

function MyFunction(){

    //Do some stuff
    let counter = @{Model.Counter};
    counter  ;

    // Do some stuff with counter

}
// When you are done, post the counter back if needed on server side

</script>

 

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

1. Мой плохой, очевидно, вам нужно увеличить переменную javascript. Я отредактировал свой ответ.

Ответ №4:

Попробуйте Это

      @{
   var a=Model.Counter;
     }
 

сделайте это вне сценария

и внутри функции или скрипта сделайте

 @a  ;
 

или

  var c = @a;
    c  ;
 

надеюсь, это сработает