Передайте данные из модели в модель View и верните JSON MVC 5 - PullRequest
1 голос
/ 14 апреля 2019

Мне нужно показать вложенную таблицу, и я получаю данные, используя Ajax.

Я пытался вернуться непосредственно из базы данных как JSON, но это дало мне Ссылку на исключение по циклическому.

Итак, я создал модель представления, похожую на мою модель, но я не могу понять, как передавать из нее данные без необходимости писать много кода с циклами и передавать по свойству

вот модели

public class Inventory
{
    public int Id { get; set; }
    public decimal Name{ get; set; }

    public ICollection<StorageUnit> StorageUnits { get; set; }      
}

public class StorageUnits
{
    public int Id { get; set; }
    public string Name{ get; set; }

    public virtual Inventory Inventory  { get; set; }      
}

public class InventoryViewModel
{
    public int Id { get; set; }
    public string Name{ get; set; }

    public ICollection<StorageUnit> StorageUnits { get; set; }      
}

public class StorageUnitsViewModel
{
    public int Id { get; set; }
    public string Name{ get; set; }

    public virtual Inventory Inventory  { get; set; }      
}

и контроллер

    public async  Task<ActionResult> GetInventories()
    {
        var inventories = await db.Inventory
            .Include(i => i.StorageUnits)
            .ToListAsync();

        var inventoryViewList = new List<InventoryViewModel>();

        foreach (var item in inventories)
        {
            inventoryViewList.Add(new InventoryViewModel
            {
                Id = item.Id,        
                Name = item.Name,
                StorageUnit = item.StorageUnit // Gives error missing cast
            });
        }

        return Json(inventoryViewList, JsonRequestBehavior.AllowGet);
    }

Ответы [ 2 ]

3 голосов
/ 14 апреля 2019

Модель инвентаризации, в которой свойство Name является десятичным, а в свойстве InventoryViewModel Name - строка, верно? Вы можете использовать этот код вместо циклов:

var inventoryViewList = inventories.Select(x => new InventoryViewModel()
            {
                Id = x.Id,
                Name = x.Name.ToString(),
                StorageUnits = x.StorageUnits
            }).ToList();

у вас есть ошибка, потому что ваш объект имеет значение null и должен изменить InventoryViewModel на:

public class InventoryViewModel
    {
        public InventoryViewModel()
        {
            this.StorageUnits = new List<StorageUnit>();
        }
        public int Id { get; set; }
        public string Name { get; set; }

        public ICollection<StorageUnit> StorageUnits { get; set; }
    }
0 голосов
/ 14 апреля 2019

Вы можете использовать библиотеку - AutoMapper

Как это

        Mapper.Initialize(cfg=>cfg.CreateMap<Inventory, InventoryViewModel>());

        var inventories =
            Mapper.Map<IEnumerable<Inventory>, List<InventoryViewModel>>(repo.GetAll());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...