Ich habe ein Modell mit Fremdschlüssel:ASP.net: Wie geht man mit nicht-gültiges Modell mit Fremdschlüssel
public class Route : IDbEntity
{
[Key]
public int Id { get; set; }
[Display(Name = "Flight number")]
[Required(ErrorMessage = "Flight number is required")]
public string FlightNumber { get; set; }
[Display(Name = "Aircraft")]
[Required(ErrorMessage = "Aircraft is required")]
public int? AircraftId { get; set; }
[ForeignKey("AircraftId")]
public virtual Aircraft Aircraft { get; set; }
}
Auf Abruf von Show
Ansicht oder Edit
Ansicht i diese verwenden, um ein Objekt abzurufen:
public new async Task<Route> Get(int id)
{
return await Context
.Set<Route>()
.Where(e => e.Id == id)
.Include(e => e.Aircraft)
.FirstOrDefaultAsync();
}
Und es funktioniert super.
Aber wenn Edit
Methode nicht gültiges Modell erhalten, versuchen i Modell View
zurückzukehren:
[HttpPost]
public async Task<IActionResult> Edit(TEntity e)
{
if (!ModelState.IsValid) return View(e);
var isSuccessfull = await service.Update(e);
if (!isSuccessfull) return StatusCode(500);
return RedirectToAction("Index");
}
Edit
Methode erhält Modell, aber mit null Verweise auf Fremdschlüssel.
Und diese Methode gibt das anzuzeigende Modell zurück, aber die Verweise auf das Fremdschlüsselobjekt sind null und die Ansicht kann dieses Objekt nicht korrekt darstellen.
Also, warum Edit-Methode erhalten Modell mit Null-Referenzen? Und wie wird ein ungültiges Modell mit korrekten Referenzen zurückgegeben?
Was denken Sie über $ .get() Abfrage mit dem Abrufen von Daten in die Seitenelemente, ohne irgendwelche Werte im Modell festgelegt? Ich sende nur GET-Anfrage jedes Mal, wenn Seite bearbeiten geladen und es funktioniert super. Daten - ist ein Primärschlüssel. Es sieht gut aus, denke ich. Aber was hast du darüber gedacht? – Evgeniy175
Wenn ich Ihren Ansatz richtig verstehe, wäre dies der zweiten Möglichkeit ähnlich: Verschmelzen Sie die geposteten Daten mit neuen Daten aus der Datenbank. Sie tun es einfach durch AJAX statt in der Steuerung. Stellen Sie nur sicher, dass Sie die geposteten Daten (d. H. Die neuen Werte der bearbeitbaren Eigenschaften) im Fehlerfall behalten, oder der Benutzer verliert die Eingaben, die er gerade vorgenommen hat. –
Ich sende ID der FK-Entität vom Modell an eine Aktion des Controllers und handle die zurückgegebenen Daten: \t $ .get ('@ Url.Action ("GetAircraft", "Aircraft")), {id: "@ Model.AircraftId"} , Funktion (Daten, Parameter) { \t \t $ ('# aircraftId'). select2 ({data: JSON.parse (data)}); \t}); – Evgeniy175