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.
Dopiero zaczynam MVC3 ale natknąłem się na tutorial z pluralsight gdzie autor używa bezparametrowej metody TryUpdateModel<T> należącej do kontrolera i dzieki temu update’uje model po zwrotnej informacji z widoku.
http://www.pluralsight-training.net/microsoft/players/PSODPlayer.aspx?author=scott-allen&name=mvc3-building-views&mode=live&clip=0&course=aspdotnet-mvc3-intro
dlatego lubie komentarze :) dzieki, nie znalem tego, na pewno sie przyda :)
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.