使用 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 ....
请注意,只要您传递单个记录或列表,您的控制器就不会更改,但您的视图会更改。
我有一个控制器正在向 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 ....
请注意,只要您传递单个记录或列表,您的控制器就不会更改,但您的视图会更改。