Ich kann die Antwort nicht finden, noch kann ich mein Problem mit dem Ergreifen von Json-Daten von einem MVC WepApi beheben und es an eine Dropdown-Liste senden..NET MVC Core JSON/Async Aufgabe, die SelectList/IEnumerable füllt
bekomme ich folgende Fehlermeldung:
RuntimeBinderException: The best overloaded method match for 'Microsoft.AspNetCore.Mvc.Rendering.SelectList.SelectList(System.Collections.IEnumerable, string, string)' has some invalid arguments
Ich packe die JSON-Daten mit dem folgenden Code, dieser Code ist jetzt in der Control sitzen:
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) });
}
Also mit der obigen Code I versucht, die Aufgabe auf eine Zeichenfolge, IEnumerable, JsonResult, alle Arten von Sachen, die es gibt mir den gleichen Fehler. Es führt mich zu der Annahme, dass das Problem sein könnte, weil es asynchron ist. Ich weiß es nicht, ich bin neu in Json und MVC Core.
Hier ist, wie ich die Informationen in die Ansicht übergeben:
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();
}
Hier ist der Quelltext der Seite anzeigen:
@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" />
}
ich gemischte Ergebnisse bin immer. Wenn ich die Anwendung zum ersten Mal lade, wird die Seite geladen und das Dropdown wird ausgefüllt. Wenn ich auf eine andere Seite klicke und zu dieser Seite zurückkomme, scheitert es vollständig mit diesem Fehler. Wie kann ich das beheben?
Shyju danken die für die Antwort, aber die work.If ich nicht 'await' es, die nur besagt, erwarten kann mit' async' verwendet werden, Wenn ich 'GrabEmployees()' ohne es 'GrabEmployees()' '' nenne, gibt 'null' zurück. – Chupacabra
Sind Sie sicher, dass "response.IsSuccessStatusCode" 'true' zurückgibt? – Shyju
Ja, es gibt 'true' zurück und Daten werden in die Variable' data' übergeben. Beim Laden der Ansicht 'Zuweisungen' bekomme ich Folgendes: 'InvalidOperationException: Es gibt kein ViewData-Element vom Typ 'IEnumerable' der Schlüssel 'EmployeeNumber'. –
Chupacabra