如何在 ASP.NET Core 6.0 MVC 中为视图内的 @model 赋予 2 个列表的值

How to give the @model inside the view a value of 2 lists in ASP.NET Core 6.0 MVC

None 到目前为止我在互联网上找到的解决方案对我有用。

如何在视图中为这个 @model 赋予 2 个列表的值?

@using BusnLogicLaag
@model List<Outfit>

我还想添加一个列表:List<Onderdeel>

这是我的两个 类:

/// <summary>
/// Onderdeel heeft unieke categorien, ook heeft deze een ID
/// Bij een onderdeel horen ook bepaalde reviews
/// </summary>
public class Onderdeel : Kleding
{
    public enum OnderdeelCategory
    {
        Broek,
        Shirt,
        Bloes,
        Schoen,
        Jurk
    }

    public int ID { get; set; }
    public List<Review> Reviews { get; set; } = new List<Review>();
    public OnderdeelCategory DeCategory { get; }

    public Onderdeel(int id, string titel, int prijs, OnderdeelCategory category, string fileAdress) : base(titel, prijs, fileAdress)
    {
        DeCategory = category;
        this.ID = id;
    }
    
    public Onderdeel(OnderdeelDTO dto) : base(dto.Titel, dto.Prijs, dto.FileAdress)
    {
        DeCategory = (Onderdeel.OnderdeelCategory)dto.DeCategory;
        this.ID = dto.ID;
    }        

    internal OnderdeelDTO GetDTO()
    {
        OnderdeelDTO dto = new OnderdeelDTO(ID, Titel, Prijs, (OnderdeelDTO.OnderdeelCategory)DeCategory, FileAdress);
        return dto;
    }

    public override string ToString()
    {
        return base.ToString() + $"\nCategory: {DeCategory}";
    }
}

/// <summary>
/// Outfit heeft unieke categorien
/// Outfit heeft ook een ID en bij een outfit kunnen meerdere reviews horen
/// </summary>
public class Outfit : Kleding
{
    public enum OutfitCategory
    {
        Trendy,
        Chic,
        Oldschool,
        Casual
    }

    public int ID { get; set; }
    public OutfitCategory DeCategory { get; set; }

    public Outfit(int id, string titel, int prijs, OutfitCategory category, string fileAdress) : base(titel, prijs, fileAdress)
    {
        DeCategory = category;
        this.ID = id;
    }

    public Outfit(OutfitDTO dto) : base(dto.Titel, dto.Prijs, dto.FileAdress)
    {
        DeCategory = (Outfit.OutfitCategory)dto.DeCategory;
        ID = dto.ID;
    }

    internal OutfitDTO GetDTO()
    {
         OutfitDTO dto = new OutfitDTO(ID, Titel, Prijs, (OutfitDTO.OutfitCategory)DeCategory, FileAdress);
         return dto;
    }

    public override string ToString()
    {
        return base.ToString() + $"\nCategory: {DeCategory}";
    }
}

它们的命名空间是BusnLogicLaag

所以重点是让该视图访问 2 个对象列表,这些对象是 OnderdeelOutfit

提前致谢!

您可以创建一个新的 ViewModel 来包裹 OnderdeelOutfit,然后直接在视图中使用这个 ViewModel。

下面是我的测试代码:

Onderdeel:

public class Onderdeel 
{
        public enum OnderdeelCategory
        {
            Broek,
            Shirt,
            Bloes,
            Schoen,
            Jurk
        }

        public int ID { get; set; }
}

服装:

public class Outfit 
{
        public enum OutfitCategory
        {
            Trendy,
            Chic,
            Oldschool,
            Casual
        }

        public int ID { get; set; }
}

视图模型:

public class TestModel
{
        public List<Outfit> outfits { get; set; }
        public List<Onderdeel> onderdeels { get; set; }
}

控制器:

public IActionResult Test()
{
            List<Onderdeel> onderdeel = new List<Onderdeel>();
            onderdeel.Add(new Onderdeel { ID = 1 });
            onderdeel.Add(new Onderdeel { ID = 2 });
            onderdeel.Add(new Onderdeel { ID = 3 });

            List<Outfit> outfits = new List<Outfit>();
            outfits.Add(new Outfit { ID = 4 });
            outfits.Add(new Outfit { ID = 5 });
            outfits.Add(new Outfit { ID = 6 });

            var viewmodel = new TestModel
            {
                onderdeels = onderdeel,
                outfits = outfits
            };

            return View(viewmodel);
}

查看:

@using _2022053001.Models
@model TestModel

<div>
    @foreach(var item in Model.onderdeels)
    {
        <div>@item.ID</div>
        <select class="form-control" asp-items="Html.GetEnumSelectList<Onderdeel.OnderdeelCategory>()"></select>
    }
</div>

<div>
    @foreach(var item in Model.outfits)
    {
        <div>@item.ID</div>
        <select class="form-control" asp-items="Html.GetEnumSelectList<Outfit.OutfitCategory>()"></select>
    }
</div>

测试结果: