C# 如果选择了其他行,则POST数据模型为空-MVC
我遇到了一个问题,如果用户选择除第一行以外的任何其他行,则数据POST返回为空。只有当用户选择第1行时,数据才会显示在帖子中 仅当我使用FormCollection返回数据时,它才起作用 我做错了什么 OrderHistory.CSHTMLC# 如果选择了其他行,则POST数据模型为空-MVC,c#,asp.net-mvc,C#,Asp.net Mvc,我遇到了一个问题,如果用户选择除第一行以外的任何其他行,则数据POST返回为空。只有当用户选择第1行时,数据才会显示在帖子中 仅当我使用FormCollection返回数据时,它才起作用 我做错了什么 OrderHistory.CSHTML @model DiningOrder.Models.JSON.OrderHistory @for (int i = 0; i < Model.orders.Count(); i++) { @using (Html.BeginForm(&quo
@model DiningOrder.Models.JSON.OrderHistory
@for (int i = 0; i < Model.orders.Count(); i++)
{
@using (Html.BeginForm("Reorder", "OrderHistory", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(x => Model.orders[i].id)
<input type="submit" value="REORDER" class="btn btn-dark btn-lg btn-block" />
}
}
这里没有任何表格和行。您的代码创建了几个单独的表单,当您提交表单时,您只需提交其中一个表单,并且您必须将提交的表单视为一个FormCollection,从您发布的视图来看,每行都有一个表单!因此,无论何时回发到服务器,您只发送一个订单ID 如果您只需要订单ID即可重新订购,则应创建重新订购方法以仅获取订单ID: [HttpPost] [ValidateAntiForgeryToken] 公共操作结果重新排序orderId { 返回视图; } 如果希望用户能够选择多个订单并对其重新排序,则可能需要稍微更改视图模型: //我完全在猜测 公共类OrderHistoryViewModel { 公共IEnumerable命令{get;set;} } 公共类OrderViewModel { 公共int-OrderId{get;set;} public bool SelectedToOrder{get;set;} } 然后在[HttpGet]方法上初始化订单列表: 公共类OrderHistoryController:控制器 { 公共行动结果指数 { var vm=新OrderHistoryViewModel { Orders=//从持久层获取订单 }; 返回Viewvm; } } 然后在index.cshtml视图中,您不需要放置多个表单,只需要一个:
@model OrderHistoryViewModel
<h3>Order History</h3>
@using (Html.BeginForm("reorder", "orderhistory", new { area = "" }, FormMethod.Post, null)
{
@Html.AntiForgeryToken()
for (int i = 0; i < Model.Orders.Count(); i++)
{
@Html.HiddenFor(x => x.Orders[i].Id)
@Html.CheckboxFor(x => x.Orders[i].SelectedToReorder)
}
<button type="submit">Re-order</button>
}
除了隐藏的文件,我看不到任何数据。排在哪里?您提交了哪些数据?请发布您的控制器。您确定Model.orders.Count>1数据是隐藏字段吗?对不起,我指的是创建此视图的操作