【问题标题】:ASP.NET CORE Error when trying to add a List of Objects to an Object with a list in it尝试将对象列表添加到其中包含列表的对象时出现 ASP.NET CORE 错误
【发布时间】:2023-01-13 04:43:54
【问题描述】:

我有一个正在处理的 ASP.Net Core 项目。所以我有一个 Linq 调用,它从数据库中获取信息并将其发送回控制器,没问题。当我将此数据发送到视图时出现错误

传入 ViewDataDictionary 的模型项的类型为“System.Collections.Generic.List`1[PhotoUploader.Models.UnitPictures]”,但此 ViewDataDictionary 实例需要类型为“PhotoUploader.Models.FileViewModel”的模型项。

现在我知道这是为什么了,因为模型类型从控制器到视图不匹配。我的问题是,如何将 UnitPictures 分配给我在其中创建的 FileViewModel 列表。

模型

public class UnitPictures
{
    public long ImageId { get; set; }
    public string FileName { get; set; }
    public string FileLocation { get; set; }
    public int SortOrder { get; set; }
}

查看模型

public FileViewModel()
{
    UnitPicturesList = new List<UnitPictures>();
}
    //Other Fields here
    public List<UnitPictures> UnitPicturesList { get; set; }
}

UnitPictures 类型的方法调用返回数据

private List<UnitPictures> GetImages(long Id)
    {
        var images = (from a in _db.Images
                      join b in _db.AutoImage 
                        on  a.ImageId equals b.ImageId
                      where b.Id == Id
                      select new UnitPictures
                      {
                         FileLocation = "",
                         FileName = a.FileName,
                         SortOrder = 0, 
                         ImageId = a.ImageId

                      }).ToList();

        return images;
    }

控制器

    public IActionResult UnitImages(long Id, long unitId)
    {           
        var images = GetImages(Id);           

                  
        return View(images);
    }

看法

 @model FileViewModel

 <div class="row">
  <div class="col-lg-4 col-md-12 mb-4 mb-lg-0">

 @for (var i = 0; i < Model.UnitPicturesList.Count; i++)
 {
    <img
      src="https://mdbcdn.b-cdn.net/img/Photos/Horizontal/Nature/4-col/img%20(73).webp"
      class="w-100 shadow-1-strong rounded mb-4"
      alt="Boat on Calm Water"
    />
 }
</div>

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core


    【解决方案1】:

    您创建视图模型的实例,填充相关成员并将其返回到视图。

    public IActionResult UnitImages(long Id, long unitId)  
        var images = GetImages(Id);           
        FileViewModel model = new FileViewModel() {
            UnitPicturesList = images
        }
                   
        return View(model);
    }
    

    【讨论】:

      【解决方案2】:

      您需要创建一个实例文件视图模型然后分配属性单元图片列表结果获取图像.最后,您返回传递 FileViewModel 实例的视图

      public IActionResult UnitImages(long Id, long unitId)
      {           
          var fileModel = new FileViewModel();
          fileModel.UnitPicturesList = GetImages(Id);           
          return View(fileModel);
      }
      

      【讨论】:

        【解决方案3】:

        如果您的视图模型是FileViewModel 类型,那么您需要将其传递给View

        public IActionResult UnitImages(long Id, long unitId)
        {           
            FileViewModel viewModel = new(){ UnitPicturesList = GetImages(Id) };           
                      
            return View(viewModel);
        }
        

        因为你有一个可变的UnitPicturesList属性,像这样直接分配它就可以了。

        【讨论】:

          猜你喜欢
          • 2021-07-29
          • 2023-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多