MVC TextBoxFor (model => model [i] .prop) внутри JavaScript для цикла

0

Я хочу, чтобы этот код работал:

$('#ddl').change(function () {

            $('#cont').html('');
            var count = getCount($('#ddl').val())
            for (var i = 0; i < count ; i++) {
                var html = '<div class="display-row">' +
                '<div class="display-label">' +
                'Vrednost:' +
                '</div>' +
                '<div class="display-field">' +
                'Od: @Html.TextBoxFor(model => model[i].Od)  Do:@Html.TextBoxFor(model => model[i].Do)' +
            '@Html.ValidationMessageFor(model => model[i].Do)' +
                    '</div>' +
                '</div>';
                $('#cont').append(html);
            }

        });

Мне просто нужно получить значение i для model[i] внутри js loop.

Как я могу это достичь?

  • 0
    В Razor мы можем получить доступ к индексу цикла только тогда, когда мы запускаем его в c #. Вы можете смешивать код c # и Razor, но c # никогда не принимает код Javascript.
Теги:
razor
asp.net-mvc-4

3 ответа

0
Лучший ответ

"Мне просто нужно получить значение я для модели [i] внутри js loop".

если вы этого хотите, вы можете сделать запрос ajax и получить свою модель как объект json. затем перебирайте свой список и делайте то, что хотите.

В контроллере создайте метод действий, который вернет список ваших моделей:

return json(your model list);

и в js do:

$.post(url, {}, function(data){
    for(var i = 0; i < data.lenght; ++i) {
    }

});

Изменить: Когда вы используете @Html.TextBoxFor(model => model[i].Od) на стороне сервера, этот html будет сгенерирован:

<input type="text" name="[i].Od" data-val="true" data-val-required="validationMessage" />

поэтому вы можете сами создавать эти теги, и вы обычно размещаете их в форме. но для проверки вы можете это сделать:

//Remove current form validation information
$("form")
    .removeData("validator")
    .removeData("unobtrusiveValidation");

//Parse the form again
$.validator
    .unobtrusive
    .parse("form");

(последний код из этого сообщения)

  • 0
    Эти поля будут входными полями, поэтому мне просто нужно сгенерировать x num текстовых полей с соответствующей проверкой.
  • 0
    @gMailMan см редактировать
Показать ещё 1 комментарий
0

Код ASP.net запускается на сервере, во-первых, прежде чем что-либо произойдет в Javascript. К моменту запуска Javascript-кода страница - это просто текст - вы не можете вызвать модель [i]. У вас есть два варианта:

  1. Если ваша модель довольно мала, вы можете использовать код на стороне сервера, пропустить бритву и создать строку, содержащую массив javascript, из модели, исправить это на странице, а затем выполнить javascript через этот массив.

  2. Если ваша модель (или ее данные) достаточно велика, чтобы вы не хотели писать все ее содержимое на странице, вы также могли бы создать метод на вашем контроллере, который вернет json, и вызовет ваш код javascript. через ajax.

0

Вы не можете этого сделать. ASP.NET генерируется на сервере, а Javascript работает только в вашем веб-браузере

  • 0
    Если вы имеете в виду, что я не могу смешать JS и бритву, да, я могу. Моя единственная проблема - это переменная i. Если я устанавливаю модель [0], я получаю базовое число texbox, но у них нет уникальных идентификаторов и имен.
  • 0
    @gMailMan вы можете, но не так, как вы думаете. Вы не можете перебрать массив модели в JS на стороне клиента

Ещё вопросы

Сообщество Overcoder
Наверх
Меню