投稿

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 = $(...

MVC Forms Authentication Timeout

シナリオ:.NET MVC、Forms Authentication にてtime out を60分に設定する。 IISのタイムアウトを65分に設定:   <system.web>       <authentication mode="Forms">       <forms loginUrl="~/Pub/SignIn" defaultUrl="~/List/Index" name="authest" protection="All" path="/" timeout="65" slidingExpiration="true"  cookieless="UseCookies" enableCrossAppRedirects ="true"/>     </authentication>     <sessionState mode="InProc" timeout="65" customProvider="DefaultSessionProvider">   </system.web> JSでタイムアウトを 60分に設定: var timeout = {     timoutPeriod: 60, // in min.     timerId: null,     resetTimeOut: function () {         if (0 < timeout.timoutPeriod) {             window.clearTimeout(timeout.timerId);             timeout.timerId = window.setTimeout(function () { timeout.timeOut(); }, timeout.timoutPeriod * 6...
備忘メモ