首页 > 解决方案 > 为什么只有部分对象传递给家庭控制器?

问题描述

从菜单页面,用户单击“添加到订单”按钮。“添加到订单”按钮触发 addToOrder 函数。该功能正常工作,饮料被传递并使用饮料信息创建订单。单击“添加到订单”按钮后,用户将被发送到确认页面,其中显示他们的饮料订单并在表格中输入他们的姓名。信息正确传递到确认页面,但是当确认页面上的表格被提交时,饮料信息没有被传递,但表格的其余部分被传递。非常感谢任何有关如何获取饮料信息以传递对象的建议!

在家庭控制器中:

从菜单页面,这将获取饮料信息并正常工作:

 [HttpGet]
    public ActionResult addToOrder(int id)
    {
     
        Drink drinkToAdd = _drinkRepository.GetDrink(id);
        List<Drink> dList = new List<Drink>();
        dList.Add(drinkToAdd);
        Order order = new Order();
        order.drinkList = dList;
        order.total = drinkToAdd.drinkPrice;
        ViewData.Model = order;
        return View("OrderConfirmation");
    }

此方法从订单确认页面的表单中获取信息:

 [HttpGet]
    public ActionResult confirmedOrder(Order order, int drinkID)
    {
        Drink drinkToAdd = _drinkRepository.GetDrink(drinkID);
        List<Drink> dList = new List<Drink>();
        dList.Add(drinkToAdd);
        order.drinkList = dList;
        _orderRepository.Add(order);
        return View("ThankYou");
    }

这是订单确认页面:

 @model BartenderApp.Models.Order

@{ 
    ViewData["Title"] = "Order Confirmation";
}
   

<html>
<body>
    <h1>Order Confirmation</h1>
    <form asp-action="confirmedOrder" method="get" >
        <p>@Html.DisplayNameFor(m => m.FirstName): @Html.TextBoxFor(m => m.FirstName)</p>
        <p>@Html.DisplayNameFor(m => m.LastName): @Html.TextBoxFor(m => m.LastName)</p>

        <table class="table">
            <thead>
                @foreach (var item in Model.drinkList)
                {
                <tr>
                    <td>
                        @Html.HiddenFor(modelItem => item.id)
                    </td>
                    <td>
                        <b>@Html.DisplayNameFor(modelItem => item.drinkName)</b>
                    </td>
                    <td>
                        <b> @Html.DisplayNameFor(modelItem => item.drinkDescription)</b>
                    </td>
                    <td>
                        <b> @Html.DisplayNameFor(modelItem => item.drinkPrice)</b>
                    </td>
                </tr>
                }
            </thead>
            <tbody>
                @foreach (var item in Model.drinkList)
                {
                <tr>
                    <td>
                        @Html.HiddenFor(modelItem => item.id, new { drinkID = item.id } )
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.drinkName)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.drinkDescription)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.drinkPrice)
                    </td>>
                </tr>
                }
            </tbody>
        </table>
        <p style="float:left">@Html.ActionLink("Modify Order", "Menu")</p>
        <p style="float:right"><b>@Html.DisplayNameFor(m => m.total):</b> $@Html.DisplayFor(m => m.total)</p>

        <input type="submit" value="Checkout" name="checkout" style="float:right" />
    </form>
</body>

</html>

当我点击表单上的提交按钮时,我认为整个对象都会通过,但只有名字和姓氏是。然后我尝试传递特定的drinkID,以便可以在存储库中找到它并将其添加到订单中。但是,drinkID 也没有通过(始终为 0)。为什么饮料信息不与对象的其余部分一起传递?

谢谢

这是我在订单确认页面上点击提交按钮后的 URL:https://localhost:44378/Home/confirmedOrder?FirstName=John&LastName=Jones&item.id=1&item.id=1&checkout=Checkout

在此示例中,我确实将 ID 为 1 的饮料添加到了我的订单中。仓库里还有一个订单,所以订单的ID是2。

标签: c#asp.net

解决方案


推荐阅读