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):

  1. 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;
  2. 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.

3 KOMENTARZE

  1. Hej, też natknąłem się na ten problem przy formularzu zwracanym przez ajax szkoda że wtedy nie znałem tego rozwiązania,
    u siebie zastąpiłem html helpera editorfor przez zwykły html z value pobieranym z modelu i o dziwo działa..

Comments are closed.