Web API - для этого словаря элемента модели требуется тип 'System.Collections.Generi c .IEnumerable - PullRequest
1 голос
/ 21 февраля 2020

При попытке просмотра представления индекса появляется следующая ошибка:

Элемент модели, переданный в словарь, имеет тип 'TrackingService.WebReferences.GetSOStsRes + Rootobject', но этот словарь требуется элемент модели типа 'System.Collections.Generi c .IEnumerable`1 [TrackingService.WebReferences.GetInvBalRes + Body]'.

Index.cs html

@model IEnumerable<TrackingService.WebReferences.GetInvBalRes.Body>

<div>
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.RecvDt)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Location)
            </th>
        </tr>

        @foreach (var item in Model)
        {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.RecvDt)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Location)
        </td>
    </tr>
                }
        </table>
</div>

HomeController.cs

   public class HomeController : Controller
    {

        public ActionResult Index()
        {
            // ViewBag.Title = "Home Page";

            string r = Class1.GetData();

            var data = JsonConvert.DeserializeObject<Rootobject>(r);
            Debug.WriteLine(data.header.DtTime);
            foreach (var d in data.body)
            {
               Debug.WriteLine(d.SOSts);
            }
            return View(data);
        }
    }

Class1.cs

Это вызов веб-API с использованием запроса и ответа.

    public class Class1
    {
        public static string GetData()
        {
            string request = "{ \"header\": {\"Token\": \"558fedce-a84e-4a9a-8698-5cd27d5af3ed\"},\"body\": {\"WarehouseCode\": \"W001\", \"CompanyCode\": \"C001\"}}";
            UploadToBCSSoftSCM b = new UploadToBCSSoftSCM();
            string response = b.GetInvBal(request);

            return response;
    }
    }

Model.cs

public class GetInvBalRes
    {
        public class Rootobject
        {
            public Header header { get; set; }
            public Body[] body { get; set; }
        }

        public class Header
        {
            public string Token { get; set; }
            public string DtTime { get; set; }
            public string ResultCode { get; set; }
            public string ResultMsg { get; set; }
        }

        public class Body
        {
            public string WarehouseCode { get; set; }
            public string CompanyCode { get; set; }
            public string Location { get; set; }
            public string SKU { get; set; }
            public string OnHandQty { get; set; }
            public string InventorySts { get; set; }
            public string LPN { get; set; }
            public string Lot01 { get; set; }
            public string Lot02 { get; set; }
            public string Lot03 { get; set; }
            public string Lot04 { get; set; }
            public string Lot05 { get; set; }
            public string ExpiryDt { get; set; }
            public string ManufactureDt { get; set; }
            public string RecvDt { get; set; }
            public string Hold { get; set; }
        }

    }

1 Ответ

1 голос
/ 21 февраля 2020

Ваша проблема заключается в несовпадении типов:

@model IEnumerable<TrackingService.WebReferences.GetInvBalRes.Body>

Здесь вы говорите, что вы хотите IEnumerable коллекцию Body объектов, но вы возвращаете тип RootObject.

var data = JsonConvert.DeserializeObject<Rootobject>(r);
return View(data);

Таким образом, вы либо измените ожидаемый тип модели в своем представлении на

@model TrackingService.WebReferences.GetInvBalRes.RootObject

, либо вернете правильный тип из вашего кода

...