c# - ASP.net: How to handle non-valid model with foreign keys -
i have model foreign keys:
public class route : idbentity { [key] public int id { get; set; } [display(name = "flight number")] [required(errormessage = "flight number required")] public string flightnumber { get; set; } [display(name = "aircraft")] [required(errormessage = "aircraft required")] public int? aircraftid { get; set; } [foreignkey("aircraftid")] public virtual aircraft aircraft { get; set; } }
on call of show
view or edit
view use retrieve object:
public new async task<route> get(int id) { return await context .set<route>() .where(e => e.id == id) .include(e => e.aircraft) .firstordefaultasync(); }
and works great.
but if edit
method received non-valid model, try return model 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
method receives model null references foreign keys.
and method returns model view, references foreign key object null , view can't render object correct.
so, why edit method receive model null references? , how return non-valid model correct references view?
on postback, viewmodel contain properties did render <input>
in html.
there 2 possibilities solve this:
- post properties needed render view. viewmodel contain these values , available in error case.
- reload data db , merge posted model in error case.
i prefer first method. lets assume need id , name of aircraft render view, not editable in view. in edit.cshtml
, render hidden field roundtrip these properties:
@html.hiddenfor(m => m.aircraft.id) @html.hiddenfor(m => m.aircraft.name) // property of related object
ps: because use entity model render view, aircraft updated if choose first approach. can prevent using viewmodel render, , map properties can edited entity in post edit action.
Comments
Post a Comment