我对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);
}
答案 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
}