touinta Ответов: 1

Передача значений из нескольких текстовых полей в контроллер


Привет

В моей форме mvc у меня есть много флажков и текстовых полей, которые генерируются динамично. Он идеально подходит для флажков, которые он пропускает только для тех, которые выбраны. Но для текстовых полей он передает все значения. Когда я отлаживаю в своей консоли, я вижу Array [45,55], я имею в виду, что он получает только заполненные текстовые поля, но в контроллере передает все значения, даже те, которые имеют 0. Есть идеи? спасибо

Что я уже пробовал:

мой взгляд

@foreach (var item in Model.SubCategory.Where(x => x.CategoryID == "05"))
               {

                       <div class="row">
                           <div class="col-sm-6">
                               <div class="form-group">
                                   <input class="col-sm-1" type="checkbox" id="@item.SubCategoryID" name="Subcategory" value="@item.SubCategoryID" />

                                   <label class="col-sm-10" for="optionId">@item.SubCategoryDescription</label>

                               </div>
                           </div>
                           <div class="form-group">
                               @Html.LabelFor(model => model.Details.Ammount, htmlAttributes: new { @class = "control-label col-md-2" })
                               <div class="col-md-2">
                                   @Html.TextBoxFor(model => model.Details.Ammount, new { @class = "ammount", Name = "ammount" } )
                                   @Html.ValidationMessageFor(model => model.Details.Ammount, "", new { @class = "text-danger" })
                               </div>
                           </div>
                       </div>


Мой скрипт

<script type="text/javascript">

        $(document).ready(function () {
            $('#postBtn').on('click', function (e) {
              
                var ammounts = [];

                $('input[name="Subcategory"]').each(function () {
                    if ($(this).is(':checked') === true) {
                        var amountField = $(this).parent().parent().next().find("input[name='ammount']");
                        if ($(amountField).val() !== '') {
                            if (parseInt($(amountField).val()) > 0) {
                                ammounts.push(parseInt($(amountField).val()));
                            }
                        }
                    }
                        
                    
                });
               
               
                console.log(ammounts);
                
                $.ajax({
                    url: '@Url.Action("Create", "Budgets")',
                    type: "POST",
                    data: JSON.stringify({
                            Subcategory: [],
                            ammount: ammounts
                        }),
                    dataType: "json",
                    traditional: true,
                    success: function () {
                        alert("ajax request to server succeed");
                    },
                    
                });
            });
        });
       
</script>


Мой контроллер

public JsonResult Create(IEnumerable<int> Subcategory, IEnumerable<decimal> ammount)

1 Ответов

Рейтинг:
2

Ajay-Systematix

Re: я имею в виду, что он получает только заполненные текстовые поля, но в контроллере передает все значения, даже те, которые с 0.

Вы добавили условие больше 0. Даже те текстовые поля, которые имеют значение 0,не включаются. Попробуйте с parseInt($(сумма).функция val()) > У= 0 это условие.

if (parseInt ($(amountField). val ()) > 0) {
ammounts.push(parseInt ($(amountField). val()));
}

Надеюсь, это вам поможет

Спасибо


touinta

Привет,

спасибо за ваш ответ!

Я пробую ваше решение, но то же самое думаю, что произошло. Хорошо то, что в базе данных сохраняется только значение заполненных текстовых полей. 37 значений появляются только в контроллере при отладке.