Jeżeli w MVC 3 (nie wiem jak w wcześniejszych wersjach), chcecie po operacji submit formularza zaktualizować jakąś wartość w waszym modelu to niezależnie jak byście się wysilali nie uda się wam to.
Są dwa wyjścia z sytuacji (przynajmniej mi znane):
- Wyczyszczenie całego stanu modelu za pomocą metody ModelState.Clear() – wymaga to jednak następnie uzupełnienia wszystkich pól modelu – odświeża to cały model;
- Wyczyszczenie pojedynczej wartości za pomocą metody ModelState.SetModelValue.
W przypadku drugim wystarczy wykonać operację:
ModelState.SetModelValue(KEY_PROP_NAME, new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
I kłopot z głowy. A za pomocą extension methods możemy zrobić coś takiego:
public static void ResetValue<TModel>(this ModelStateDictionary @this, Expression<Func<TModel, object>> action)
{
var expression = (MemberExpression)action.Body;
@this.SetModelValue(expression.Member.Name, new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture));
}
Po zwróceniu View nasza wartość zostanie odświeżona.