0
我有外鍵的模型非有效模式:ASP.net:如何處理與外鍵
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; }
}
在Show
視圖或Edit
鑑於呼叫我用這個檢索對象:
public new async Task<Route> Get(int id)
{
return await Context
.Set<Route>()
.Where(e => e.Id == id)
.Include(e => e.Aircraft)
.FirstOrDefaultAsync();
}
它的工作很棒。
但如果Edit
方法收到的非有效的模型,我嘗試模型返回View
:
[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
方法接收模式,但與外鍵空引用。
並且此方法返回模型以查看,但對外鍵對象的引用爲空,並且視圖無法使該對象正確顯示。
那麼,爲什麼編輯方法接收空引用模型?以及如何使用正確的引用返回無效的模型以查看?
您如何看待$ .get()查詢並將數據檢索到頁面元素中而不在模型內設置任何值?每次編輯頁面加載時,我都會發送GET請求,並且效果很好。數據 - 是主鍵。我認爲這看起來很棒。但你對此有何看法? – Evgeniy175
如果我正確理解您的方法,這與第二種可能性類似:將發佈的數據與來自數據庫的新數據合併。你只需通過AJAX而不是在控制器中完成。只要確保您在發佈錯誤的情況下保留髮布的數據(即可編輯屬性的新值),或者用戶放棄了他剛纔的輸入。 –
我將FK實體的Id從模型發送到控制器的某些動作並處理返回的數據:\t $ .get('@ Url.Action(「GetAircraft」,「Aircrafts」)',{id:「@ Model.AircraftId」} ,功能(數據,參數){ \t \t $('#airId').select2({data:JSON.parse(data)}); \t}); – Evgeniy175