代码之家  ›  专栏  ›  技术社区  ›  Vasja

将模型指定为列表C#

  •  -1
  • Vasja  · 技术社区  · 7 年前

    enter image description here 为什么我的名单 files 获取任何值? 我有另一个页面与相同的逻辑,一切都很好。

    如果需要,我可以提供更多代码。

    public ActionResult TestPDF(List<int> fileid)
        {
    
            List<object> myModel = new List<object>();
            List<object> obj = new List<object>();
    
            foreach (var id in fileid)
            {          
                obj.Add(db.UploadedFiles.Find(id));
            }
            myModel.Add(obj);
    
            return View(myModel);
        }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Evan Huang    7 年前

    抱歉,我在您的快照中不够仔细。你 Model 是的集合 IEnumerable<UploadedFile> ,因此 [0] 确实需要获得第一个 IEnumerable<上载文件(>); . 因此,您需要做的是:

    List<Upload.Models.UploadedFile> files = Model.ToList()[0].ToList();
    

    或者您可以只列举文件,如下所示:

    @foreach (var item in Model.ToList()[0])
    {
        ...
    }
    

    编辑 : 更好的方法是修改控制器,使其返回强类型模型,并去掉不必要的嵌套列表:

    public ActionResult TestPDF(List<int> fileid)
    {
    
        var myModel = new List<UploadedFile>();
    
        foreach (var id in fileid)
        {          
            myModel.Add(db.UploadedFiles.Find(id));
        }
    
        return View(myModel);
    }
    

    然后您可以修改 @model 在您看来

    @model List<Upload.Models.UploadedFile>
    

    并循环文件

    @foreach (var item in Model)
    {
        ...
    }
    

    编辑2 假设您使用的是实体框架,则可以进一步优化控制器,以:

    public ActionResult TestPDF(List<int> fileid)
    {
        List<Upload.Models.UploadedFile> myModel = fileid == null ? new List<Upload.Models.UploadedFile>() : db.UploadedFiles.Where(o => fileid.Contains(o.ID)).ToList();
    
        return View(myModel);
    }