Je ne trouve pas la réponse et je ne peux pas résoudre mon problème en saisissant des données Json d'un MVP WepApi et en les envoyant à une liste déroulante..NET MVC Core Json/Async Tâches remplissant SelectList/IEnumerable
je reçois l'erreur suivante:
RuntimeBinderException: The best overloaded method match for 'Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable, string, string)' has some invalid arguments
Je prends les données Json en utilisant le code suivant, ce code est assis dans le Controlller en ce moment:
public async Task<IActionResult> GrabEmployees()
{
var item = new List<EmployeeViewModel>();
using (var employee = new HttpClient())
{
employee.BaseAddress = new Uri("http://localhost:5050/");
employee.DefaultRequestHeaders.Accept.Clear();
employee.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await employee.GetAsync("api/employees");
if (response.IsSuccessStatusCode)
{
item = await response.Content.ReadAsAsync<List<EmployeeViewModel>>();
}
}
return ViewBag.Employees = item.Select(employee => new SelectListItem { Value = employee.EmployeeNumber, Text = (employee.FirstName + " " + employee.LastName) });
}
Donc, avec le code ci-dessus, je essayé de définir la tâche à une chaîne, IEnumerable, JsonResult, toutes sortes de choses, il me donne la même erreur. Cela m'amène à croire que la question pourrait être parce qu'elle est asynchrone. Je ne sais pas si, je suis nouveau à Json et MVC Core.
Voici comment je passe les informations dans la vue:
public IActionResult Assignments()
{
ViewData["Title"] = "Assign Asset";
ViewData["Message"] = "Use this section to assign assets to Employees.";
ViewBag.Employees = GrabEmployees();
ViewBag.Assets = AManger.GetAll();
//Allows to assign assets to employees
return View();
}
Voici le code de la page Voir:
@model IEnumerable<Final.HRInventoryApp.Models.AssetViewModel>
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
@using (Html.BeginForm())
{
@Html.DropDownList("Asset", new SelectList(ViewBag.Assets, "Id", "TagNumber"))
@Html.DropDownList("EmployeeId", new SelectList(ViewBag.Employees, "Value", "Text"))
<input type="submit" id="buttonsubmit" value="Submit" />
}
Je reçois des résultats mitigés. Lorsque je lance l'application pour la première fois, la page se charge et la liste déroulante est remplie. Si je clique sur une autre page et reviens à cette page, elle échoue complètement avec cette erreur. Comment puis-je résoudre ce problème?
Shyju merci de la réponse, mais cela ne work.If j'utilise 'await', il déclare que d'attendre ne peut être utilisé avec' async', si j'appelle le 'GrabEmployees()' sans lui 'GrabEmployees()' renvoie 'null'. – Chupacabra
êtes-vous sûr que 'response.IsSuccessStatusCode' retourne' true'? – Shyju
Oui, il retourne 'true' et les données sont passées dans la variable' data', je reçois ce qui suit lors du chargement de la vue 'Assignments' cependant' InvalidOperationException: Il n'y a aucun élément ViewData de type 'IEnumerable' qui a la clé 'EmployeeNumber' .' –
Chupacabra