从一个视图向另一个控制器传递ID列表时遇到的问题

时间:2019-04-29 13:54:52

标签: list asp.net-core-mvc many-to-many

我试图通过单击按钮将int Id列表从一个视图传递到另一个视图。我可以打控制器,但它传递的是null。

HTML:

 @foreach (var business in Model.Businesses)
                {
                    <tr>
                        <td>@business.Name</td>                        
                        <td>
                            <p>
                                @foreach (var bt in @business.BusinessTypes)
                                {
                                    @bt.Name;
                                }
                            </p>
                        </td>                      

                        <td><button type="button" id="btnCalcVS"> Calculate Validator Score</button></td>
                    </tr>
                }

JQUery:

<script type="text/javascript">
    $(document).ready(function () {
        var businessTypeIds = [];
        $(document).on("click", "#btnCalcVS", function () {           

            $.ajax({
            type: 'POST',
                    url: '/BusinessType/Index',
                    contentType: "application/json",
                    data: JSON.stringify( @foreach (var business in Model.Businesses)
            {
                     @foreach (var bt in @business.BusinessTypes)
                     {
                        @bt.Id;
                      }
            }),                       
                success: function (data) {
                    alert("success");
                },
                    error: function (e) {
                    alert(e);

                }

            });
        });
    });
</script>

控制器:

[HttpPost]
        [Route("/BusinessType/Index")]
        public IActionResult Index([FromBody] List<int> businessTypeIds)
        {

//logic
}

如前所述,我正在击中控制器,但是它具有空值。从HTML代码可以看出,我在列表中有一个列表。 (公司内部的业务类型,因此有2个多对多关系)

有人可以告诉我我要去哪里错吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试从html获取ID,然后将其传递给控制器​​。

    <form method="post">
        <table class="table">
            <thead>
                <tr>
                    <th>
                        @Html.DisplayNameFor(model => model.DenniPlan2[0].Id)
                    </th>

                    <th>
                        @Html.DisplayNameFor(model => model.DenniPlan2[0].CisloZakazky)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.DenniPlan2[0].CisloProduktu)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => model.DenniPlan2[0].Poradi)
                    </th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model.DenniPlan2)
                {
                    <tr>
                        <td>
                            @Html.EditorFor(model => item.Id)
                        </td>

                        <td>
                            @Html.EditorFor(model => item.CisloZakazky)
                        </td>
                        <td>
                            @Html.EditorFor(model => item.CisloProduktu)
                        </td>
                        <td>
                            @Html.EditorFor(model => item.Poradi)
                        </td>
                    </tr>
                }            
            </tbody>
        </table>
        <input type="button" id="btnCalcVS" value="submit" />
    </form>

    @section Scripts{
    <script type="text/javascript">
        $(document).ready(function () {
            var businessTypeIds = [];
            $("[id=item_Id]").each(function () {
                businessTypeIds.push($(this).val());
            });
            console.log(businessTypeIds);
                $(document).on("click", "#btnCalcVS", function () {

                    $.ajax({
                        type: 'POST',
                        url: '/BusinessType/Index',
                        contentType: "application/json",
                        data: JSON.stringify(businessTypeIds),
                        success: function (data) {
                            alert("success");
                        },
                        error: function (e) {
                            alert(e);
                        }

                    });
                });
            });
    </script>
    }

对于这一行$("[id=item_Id]").each(function () {,您可以通过在网络浏览器中检查生成的html来获取ID值item_Id