【问题标题】:Iterate a collection of models to save multiple records in MVC迭代模型集合以在 MVC 中保存多条记录
【发布时间】:2016-06-27 11:11:00
【问题描述】:

我有这个 POST 操作结果,它接收两个模型,一个来自主视图,另一个来自局部视图 来自主视图的模型很好,因为它一次只会发布一条记录问题出在我 POST 方法从部分视图接收的模型上,因为它一次发送多条记录,我的问题是如何循环通过来自部分视图的模型,以便我可以保存所有记录而不仅仅是一个 这是我的代码

    [HttpPost]
    public ActionResult Test(ViewModels model)
    {
        var pecEquipmentRequest = new PECEquipmentRequest()
        {
            ProjectId = model.ModeleEquipmentSpViewModel.ProjectId,
            JobNo = model.ModeleEquipmentSpViewModel.JobNo,
            RequestDate = model.ModeleEquipmentSpViewModel.RequestDate
        };
        db.PECEquipmentRequests.Add(pecEquipmentRequest);
        db.SaveChanges();

        //foreach (int items in model.ModelEquipmentRequestResult[0].Id.ToString())
        //{

       // }

        var pecEquipmentRequestDetail = new PECEquipmentRequestDetail()
        {
            EquipmentRequestId = pecEquipmentRequest.Id,
            EquipmentId = model.ModelEquipmentRequestResult[0].Id,
            Planned = model.ModelEquipmentRequestResult[0].Planned,
            Actual = model.ModelEquipmentRequestResult[0].Actual,
            // Remarks = model.ModeleEquipmentSpViewModel.Remarks
        };
        db.PECEquipmentRequestDetails.Add(pecEquipmentRequestDetail);
        db.SaveChanges();
        return RedirectToAction("Index", "Home");
    }

此部分需要循环

    var pecEquipmentRequestDetail = new PECEquipmentRequestDetail()
    {
        EquipmentRequestId = pecEquipmentRequest.Id,
        EquipmentId = model.ModelEquipmentRequestResult[0].Id,
        Planned = model.ModelEquipmentRequestResult[0].Planned,
        Actual = model.ModelEquipmentRequestResult[0].Actual,
        // Remarks = model.ModeleEquipmentSpViewModel.Remarks
    };
    db.PECEquipmentRequestDetails.Add(pecEquipmentRequestDetail);
    db.SaveChanges();

更新

ModelEquipmentRequestResult 属性是 List<EquipmentRequest_Result>

我的 ViewModel 类是:

public class ViewModels
{
    public EquipmentSpViewModel ModeleEquipmentSpViewModel { get; set; }
    public List<EquipmentRequest_Result> ModelEquipmentRequestResult { get; set; }
}

【问题讨论】:

  • 你需要展示你的模型和视图(如果你使用部分,它不太可能会正确绑定,除非你通过HtmlFieldPrefix
  • ViewModels 类对象是什么样的,请分享该代码。
  • @DavidPine 请立即查看

标签: c# asp.net-mvc for-loop foreach


【解决方案1】:

如何遍历来自部分视图的模型,以便我可以保存所有记录而不是只保存一条这是我的代码。

您希望使用foreach 循环。您将需要一个实现IEnumerableIEnumerable&lt;T&gt; 接口的集合。迭代的语法相当简单。

使用foreach 关键字,然后将迭代器表达式括在开/关括号(iterator expression) 中,如下所示:

foreach (var value in model.SomeKnownCollection)
{
    // At this point, the variable namely "value" is one of the values in the collection
    // And this snippet of code will be executed "for each" value in the collection...
}

这有意义吗?由于我们尝试迭代的 ViewModels 类属性是 List&lt;T&gt; where T : EquipmentRequest_Result 类型,这根本不是问题。

foreach (var result in model.ModelEquipmentRequestResult)
{
   // We add to the details a new instance of the "pecEquipmentRequestDetail"
   // From the "result" in the collection...
   db.PECEquipmentRequestDetails.Add(
       new pecEquipmentRequestDetail
       {
           EquipmentRequestId = pecEquipmentRequest.Id,
           EquipmentId = result .Id,
           Planned = result .Planned,
           Actual = result .Actual
       });
}

db.SaveChanges();

但是,如果使用 Linq,这可以通过使用 SelectAddRange 来简化:

db.PECEquipmentRequestDetails.AddRange(
    model.ModelEquipmentRequestResult
         .Select(result => new pecEquipmentRequestDetail
       {
           EquipmentRequestId = pecEquipmentRequest.Id,
           EquipmentId = result .Id,
           Planned = result .Planned,
           Actual = result .Actual
       }));
}

db.SaveChanges();

【讨论】:

  • 谢谢,非常有帮助
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多