c# - 为什么只有部分对象传递给家庭控制器?
问题描述
从菜单页面,用户单击“添加到订单”按钮。“添加到订单”按钮触发 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。
解决方案
推荐阅读
- bash - 如何从我的 bash 历史记录中删除与特定模式匹配的行?
- spring-data-jpa - 如何从具有特定投影名称的服务/控制器调用 Spring Data 存储库方法?
- c - 如何释放内存并同时返回指针?
- python - 如何将 pandas isin 输出数据帧转换为 json 或列表格式
- azure - 连接 Azure VM 的 Azure Ad 域
- python - 如果它在具有匹配索引的python中的2个列表中,如何更改一个值
- python - 本地托管的 Django 项目,可在本地网络中长期使用
- c# - 使用字符串插值时是否可以混合字符串资源?
- c - 在 Linux 应用程序中获取 SSL_connect 分段错误
- thymeleaf - 在数组上第 100 次使用后无法在 thymeleaf 模板中使用索引变量