Спасаясь от JavaScript в Razor - PullRequest
0 голосов
/ 15 июня 2019

Я использую бритву для генерации JavaScript в цикле бритвы, но я не могу использовать переменную в нем

Это мой код

<script>
$(function () {

     @Html.Raw("$('#@Html.IdFor(m => m.DG['@i'].status_code)').on('change', function () { Dg_Calculate('@i');});")
     @Html.Raw("$('#@Html.IdFor(m => m.DG['@i'].belasting)').on('change', function () { Dg_Calculate('@i'); });")
     @Html.Raw("$('#@Html.IdFor(m => m.DG['@i'].max_belasting)').on('change', function () {Dg_Calculate('@i');});")

      $("#txtDate").datepicker();
 });

 function Dg_Calculate(item) {
 alert(item);
 }
</script>

Здесь, в сгенерированном коде "@i"идет как есть, а не значение" я "

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Ваша строка, переданная @Html.IdFor, обрабатывается как string, поэтому использование @ внутри нее ничего не значит.

Вы также можете использовать интерполяцию строк , и ваш код должен выглядеть примерно так:


<script>
    $(function () {
        @for (var i = 0; i < 15; i++) {
            @Html.Raw($"$('#{Html.IdFor(m => m.DG[i].status_code)}').on('change', function () {{ Dg_Calculate({i});}});")
            @Html.Raw($"$('#{Html.IdFor(m => m.DG[i].belasting)}').on('change', function () {{ Dg_Calculate({i});}});")
            @Html.Raw($"$('#{Html.IdFor(m => m.DG[i].max_belasting)}').on('change', function () {{ Dg_Calculate({i});}});")
        }

        $("#txtDate").datepicker();
    });

    function Dg_Calculate(item) {
        alert(item);
    }
</script>
0 голосов
/ 15 июня 2019

Мне кажется, я понимаю, чего вы пытаетесь достичь - всякий раз, когда любой из 14 элементов, имеющих следующие классы status_code, belasting, max_belasting, вы хотите вызвать функцию Dg1_Calculate.

Если это так, то это легче сделать в самом Javascript, чем пытаться писать код Razor для генерации Javascript. Похоже, что вы используете синтаксис jQuery, так что примерно так:

@section Scripts {
    <script type="text/javascript">
        $('.status_code,.belasting,.max_belasting').on('change', function()
        {
             var index = $('.status_code,.belasting,.max_belasting').index(this);
             Dg_Calculate(index);
        });

       function Dg_Calculate(index) {
          console.log(index)
       }
    </script>
}

Возможно, вам также потребуется включить библиотеку jQuery над разделом сценария / в шаблон макета, если это еще не сделано, например:

@Scripts.Render("~/bundles/jquery")

Для справки см. Раздел Библиотеки JavaScript и jQuery множественный селектор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...