I’ve currently got an issue where I need to see which fields have been changed on an Edit field for auditing purposes, in which I have code for, but I think my problem lies within my MVC View.
I have (test code):
[HttpPost]
public ActionResult Adjustment(GroupPolicy groupPolicy)
{
if (ModelState.IsValid)
{
_service.SaveGroupPolicy(groupPolicy);
return RedirectToAction("Index");
}
return View(groupPolicy);
}
Which is fine, the Policy saves. However, take this into consideration:
GroupPolicy has, say, 3 fields (in reality there are, maybe, 60):
bool IsPolicy
string Name
string Description
Name and Description are on the form, so that’s fine. IsPolicy isn’t used on the form, so that gets defaulted to false when posted back to the GroupPolicy object in the Adjustment method.
I can’t really put IsPolicy in a Hidden field on the form, as that won’t be elegant for 60+ fields in my actual solution, the HTML would be all over the place.
Now that the bool is defaulted to false, it completely abolishes the chance of me knowing if the field has changed or not. All I really want is a method for this data to be preserved, whilst keeping the new information on the Edit form.
Is this possible, am I missing something obvious?
Well first of all,
GroupPolicyshould be a view model and not an entity – and as such it should be tailored for the view e.g.Then in your action you don’t need to worry about assigning values that have changed, you just map the view model directly across e.g.
This keeps a clean separation between your view & business logic. Also, it allows you to add annotations for client-side validation without affecting your real model.
I would recommend using AutoMapper for this e.g.