使用 DTO 和 ASP.NET MVC 中的 API 将数据从控制器发送到视图

Send data from the controller to the view using DTO and API in ASP.NET MVC

我有一个控制器正在向 API 发送项目列表,然后我返回项目响应,这意味着我将收到,例如,如果项目不是发现或无效它工作正常!但我想知道如何将 dtoresponse 列表从我的控制器发送到视图以及我需要在视图中添加什么?

DTO

 public class ReceivedItemsRequest
    {
        public List<string> Items { get; set; }


    }
    public class ReceivedItemsResponse
    {
        public bool HasErrors { get; set; }

public List<ReceivedItemResponse> ItemResponses { get; set; } = new List<ReceivedItemResponse>() ;

    }

    public class ReceivedItemResponse
    {
        public string Barcode { get; set; }
        public string ErrorMsg { get; set; }


    }
}

控制器


       [HttpPost]
        public async Task<ActionResult> Received(List<string> itemsList)

        {
            try
            {

       var dtoRequest = new ReceivedItemsRequest();
       var dtoResponse = new ReceivedItemsResponse();

       dtoRequest.itemsList= itemsList;
dtoResponse = await API.Post<ReceivedItemsResponse, ReceivedItemsRequest>($"items/", dtoRequest);



    return View(dtoResponse);  ---> this part I'm not sure
 how to send the list and what I need to add in the view or if I need to create a view model?
            
            }

从您的代码中,我发现您在控制器中 return 是单个记录而不是列表。因此,如果您的 API return 值是单个记录,您将发送到如下视图:

您的控制器:

[HttpPost]
 public async Task<ActionResult> Received(List<string> itemsList)
 {
    ...
    dtoResponse = await API.Post<ReceivedItemsResponse, ReceivedItemsRequest>($"items/", dtoRequest);
    return View(dtoResponse);
 }

您的观点:

@model Application.ReceivedItemsResponse
@{
  ViewBag.Title = "Received Items Response";
}
...HTML Code on View here...

如果您希望将列表作为响应,那么在您的视图中您将拥有:

@model IEnumerable<Application.Models.ReceivedItemsResponse>

@{
     ViewBag.Title = "Index Item Response";
 }
 ...HTML Code Block here ....

请注意,只要您传递单个记录或列表,您的控制器就不会更改,但您的视图会更改。