如何将ViewModels列表传递给View?

时间:2019-04-05 14:22:38

标签: c# asp.net-mvc viewmodel

我对C#和asp.net mvc还是很陌生,我一直试图在这里和其他论坛中找到我的问题的答案,但没有成功。但是,如果在此之前已问过并回答了这个问题,我深表歉意,请您链接到该帖子。

我试图创建一个树视图,在其中将ViewModel列表传递给View。

我使用代码优先方法,并在模型和数据库之间添加了迁移。

我的问题是如何将ViewModel的对象列表传递给View? 我可以从控制器传递模型的对象列表,但是如何传递ViewModel的对象列表?有可能吗?

也许对此有一个简单的解决方案,但我还没有找到,也许我做错了。无论如何,我真的需要一些帮助。

public class MyClass
  {
        public int Id { get; set; }
        public int ParentId { get; set; }
        public string Name { get; set; }
  }


public class MyClassViewModel
  {
    public MyClass Parent { get; set; }
    public List<MyClass> Children
    {
        get { return GetChildren(); }
    }
    public List<MyClass> GetChildren()
    {
        var listOfChildren = new List<MyClass>().Where(c => c.ParentId == 
        Parent.Id).ToList();

        return listOfChildren;
    }
  }


public ActionResult CreateTree()
    {
        var viewModel = new MyClassViewModel();
 //This only returns one instance of an object, how to return a list?
        return View("CreateTree", viewModel); 
    }

2 个答案:

答案 0 :(得分:0)

这很简单,您只需将视图模型的列表传递给视图:

[HttpGet()]
public IActionResult CreateTree()
{
    List<MyViewModel> viewModelList = MyViewModel.GetList();
    return View("CreateTree", viewModelList);
}

在视图上,您​​可以通过@model指令设置模型的预期类型。

@model List<MyViewModel>
@{
    //stuff
}

现在,您只需遍历视图模型列表即可。

@foreach (MyViewModel item in Model)
{
     //stuff
}

答案 1 :(得分:0)

您可以创建一个包含ViewModel列表的类

public class ModelWithListOfViewModels
{
    public List<ViewModel> ViewModels { get; set; }
}

将ViewModels添加到控制器的列表中

public ModelWithListOfViewModels model { get; set; }

[HttpGet()]
public ActionResult FillList()
{
    model = new ModelWithListOfViewModels();
    //Here you fill the list with the ViewModels you want to pass to the View
    model.ViewModels.Add(/** ViewModel here **/);
    return View("CreateTree", model);
}

然后只需遍历列表即可在视图中获取模型

@model ModelWithListOfViewModels

@foreach (var vm in Model.ViewModels)
{
     //use vm to get access to a ViewModel added in the list
}