Публикация списка объектов, которые находятся внутри модели представления, от представления к контроллеру в asp. net core 2.2. - PullRequest
0 голосов
/ 25 января 2020

У меня есть модель представления с именем «RequestGoodsBrandViewModel», и это комбинация двух моделей (Request и RequestGoodsBrand), я хочу опубликовать список объектов «RequestGoodsBrand» модели представления «RequestGoodsBrandViewModel» от представления к контроллеру.

 public class RequestGoodsBrandViewModel
{
    public Request request{ get; set; }//single object of this
    public List<RequestGoodsBrand> requestGoodsBrand { get; set; }//List of object of this 
}

мой взгляд

                                <tbody>
                                <tr v-for="(data, index) in goods">
                                    <td width="20%">
                                        <select id="goodsDDL" class="form-control">
                                            <option v-for="options in goodsList" :value="options.id">{{options.name}}</option>
                                        </select>
                                    </td>
                                    <td width="20%">
                                        <input type="number" v-model="data.quantity" id="quantityTxt" class="form-control" />
                                    </td>
                                    <td width="20%">

                                        <select id="brandDDL" class="form-control">
                                                <option v-for="options in brands" :value="options.id">{{options.name}}</option>
                                            </select>
                                    </td>
                                    <td width="7%">
                                        <a v-on:click="addRow(index)" class="btn"><i class="fa fa-plus-circle" style="color:darkgreen"></i></a>
                                        <a v-on:click="removeRow(index)" class="btn"><i class="fa fa-minus-circle" style="color:red"></i></a>
                                    </td>
                                </tr>
                                <tr>
                                    <td colspan="4">
                                        <label>توضیحات</label>
                                        <textarea id="descTxt" class="form-control"></textarea>
                                    </td>
                                </tr>
                            </tbody>

Вид выглядит так, и таблица динамична c, при нажатии кнопки плюс будет добавлена ​​новая строка enter image description here

 public IActionResult AddRequestedGoods(RequestGoodsBrandViewModel model)// only RequestGoodsBrand of RequestGoodsBrandViewModel must  be a list 
    {
    }

Редактировать: Я отправляю свою ViewModel на контроллер, используя ajax call

 var requestGoodsBrand = {}
        var request = {
            NeedDate: $('#needDate').val(),
            Description: $('#descTxt').val(),
        }
        var table= document.getElementById('goodsTbl')
        for (var i = 1; i < table.rows.length - 1; i++) {
            requestGoodsBrand[i] = {
            GoodsId:(table.rows[i].cells[0].children[0].value),
            Quantity:(table.rows[i].cells[1].children[0].value),
            BrandId:(table.rows[i].cells[2].children[0].value)
            }
        }
        var model = {
            "request": request,
            "requestGoodsBrand": requestGoodsBrand,
        }
        console.log(model)
                    var data = JSON.stringify(model)
        $.ajax({
            type: "POST",
            async: true,
            url: '/GoodsRequest/AddRequestedGoods',
            data: model,
            //contentType: "application/json; charset=utf-8",
            //dataType: "html",
            success: function (data) {

            }
        });

первый объект получает данные, но второй объект, который является списком, возвращает null enter image description here Любое решение?

1 Ответ

1 голос
/ 28 января 2020

Я написал демо-код для того же, пожалуйста на Jquery попробуйте:

Jquery

function () {
            var requestGoodsBrand = [];
        var request = {
            NeedDate: 'demo1',
            Description: 'demo2',
            }
            $('table tr').each(function () {
                var entity = {
                    GoodsId: $($(this).find('td:eq(0) input')).val(),
                    Quantity: $($(this).find('td:eq(1) input')).val(),
                    BrandId: $($(this).find('td:eq(2) input')).val()
                };
                requestGoodsBrand.push(entity);
            })
            $.post('/Home/AddRequestedGoods', { requestGoodsBrand: requestGoodsBrand, request: request })
                .done(function (result) {

                }

C#

 [HttpPost]
        public string AddRequestedGoods(Request request, List<RequestGoodsBrand> requestGoodsBrand)
        {
            return "";
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...