Как передать список ViewModels в View? - PullRequest
0 голосов
/ 05 апреля 2019

Я довольно новичок в C # и asp.net mvc, и я пытался найти ответ на свой вопрос здесь и на других форумах, но безуспешно. Однако, если этот вопрос был задан и получен ответ до этого, я прошу прощения, и не могли бы вы дать ссылку на этот пост.

Я пытаюсь создать древовидное представление, в котором я передаю список ViewModels моему 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 голосов
/ 05 апреля 2019

Вы можете создать класс, содержащий список ваших ViewModels

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
}
0 голосов
/ 05 апреля 2019

Это очень просто, вы просто передаете список своей модели вида:

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

В представлении вы устанавливаете ожидаемый тип для модели с помощью директивы @model.

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

Теперь вы можете просто перебирать свой список моделей.

@foreach (MyViewModel item in Model)
{
     //stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...