Razorview 中两个单独的列表正在更改

问题描述 投票:0回答:1

我使用页面模型创建了 2 个单独的列表,如下所示:

@model IEnumerable<Batch>
@{
    ViewBag.Title = "Batches";
    bool FirstEveningBatch = true;
    List<Batch> WeekDaysBatch = new List<Batch>(Model.ToList());
    List<Batch> WeekEndBatch = new List<Batch>(Model.ToList());
}

现在我使用第一个列表调用扩展方法,如下所示

@foreach (var item in WeekDaysBatch.Where(x => !x.IsWeekendBatch).AppendBatchNumber())
{
    // ... some code ...
}

这里是

AppendBatchNumber()
扩展方法:

public static IEnumerable<Batch> AppendBatchNumber(this IEnumerable<Batch> batches)
{
    bool IsFirstEveningBatch = true;
    int batchnumber = 0;

    Batch[] batchesArray = batches.OrderBy(x=> x.StartTime).ToArray();

    for (int i = 0; i < batchesArray.Length; i++)
    {
        if (batchesArray[i].Name.StartsWith("Evening") && IsFirstEveningBatch)
        {
            batchnumber = 0;
            IsFirstEveningBatch = false;
        }

        batchesArray[i].Name = string.Format("{0}-{1}", batchesArray[i].Name, ++batchnumber);
    }

    return batchesArray;
}

但是第二个列表

WeekEndBatch
也正在改变。有什么办法可以避免第二个列表被更改吗?

这是

Batch
课程:

public class Batch
{
    public int Id { get; set; }
    public string Name { get; set; }

    [NoBatchAfter9PM]
    public TimeSpan StartTime { get; set; }

    [NoBatchAfter9PM]
    public TimeSpan EndTime { get; set; }

    public string? Description { get; set; }

    [Display(Name="Is it a Weekend batch?")]
    public bool IsWeekendBatch { get; set; }

    [Display(Name = "Is it a Women's batch?")]
    public bool IsWomenBatch { get; set; }

    public ICollection<Learner>? Learners { get; set; }
    public Coach? Coach { get; set; }
}
c# .net entity-framework asp.net-core razor-pages
1个回答
0
投票

两个列表都更新的原因是您回调的 Model 对象是被引用的,实际上并不是一个副本。您将需要创建它的克隆,就像这里提到的那样 - 使用 Clone() 复制 ASP.NET MVC / EntityFramework 模型对象

然后会发生的情况是,您拥有对象的副本,而不是实际的对象本身。如果您想修改原始对象,我不知道这对您的情况是否有帮助,但如果是这样,只需在 WeekDaysBatch 中使用 Model.ToList ,然后在 WeekEndBatch 中使用克隆来执行您想要执行的任何临时工作。

© www.soinside.com 2019 - 2024. All rights reserved.