投稿

11月, 2016の投稿を表示しています

HiddenFor 要注意

MVC View で、HiddenFor は View Model よりも ModelState の値を優先する。 これで困るのは、以下のようなシナリオ: 初回ページ(GET)で、HiddenFor(p=>p.Step) で値が "1" だとする。 ユーザーが何らかの入力を実施、POST する。 Controller にて Save その他処理し、Step を "2" に増やす。しかしながら必須入力漏れがあり、Redirect せずに、ModelState.IsValid == false のまま Render する。 このRenderの際、HiddenFor(p=>p.Step) は、値 "1" を採ってしまう。 http://stackoverflow.com/questions/4710447/asp-net-mvc-html-hiddenfor-with-wrong-value 仕様なのだそうだが、理由はわからん。 よって、stateが変わる Action の場合、HiddenFor は使わぬが良し。 <input type="hidden" id="Step" name="Step" value="@Model.Step" /> もしくは 、ModelState の値を変えちゃうには、 ModelState.SetModelValue("Property", new ValueProviderResult("", "abc", CultureInfo.InvariantCulture)); ちなみに、bool 値を流したい場合は、文字列に変え、 <input type="hidden" id="Step" name="BoolValue" value="@Model.BoolValue.ToString()" /> JS 側では、 var boolValue = $(...