Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果选择了其他行,则POST数据模型为空-MVC_C#_Asp.net Mvc - Fatal编程技术网

C# 如果选择了其他行,则POST数据模型为空-MVC

C# 如果选择了其他行,则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

我遇到了一个问题,如果用户选择除第一行以外的任何其他行,则数据POST返回为空。只有当用户选择第1行时,数据才会显示在帖子中

仅当我使用FormCollection返回数据时,它才起作用

我做错了什么

OrderHistory.CSHTML

@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数据是隐藏字段吗?对不起,我指的是创建此视图的操作