
こんにちわ!
度々ですが、ASP.NET MVC 5のEntity frameworkでWeb勤務表を作成しています。
ビューでの始業時間、終業時間、休憩時間の入力にはTimeSpan型を使用していますが、この入力に対し例外処理を付けたいと思っています。実装したい処理は、
①秒、分に0~59以外が入るときエラーを出す→現状だとnullがpostされる
②時に24以上が入るときエラーを出す→現状だと日(Day)に24が入りPostされる
これらの場合に、入力されたEditorを赤くし、エラーコメントを出したいと思います。
おそらく他にも例外処理が必要かと思いますが、とりあえずこの2つの処理を追加したいです。
エラー時にViewの変更を行うため、Scriptで書く必要があるのかと思いますが、どのようにしていいか分かりません。
何かアドバイスをいただけたらと思います。
以下に写真とコードを載せます。
ビュー:
@model Kintai_CS_.Models.KintaiModel @{ /**/ ViewBag.Title = "勤務表"; Layout = "~/Views/Shared/_Layout.cshtml"; Dictionary<int, SelectList> dictionary = (Dictionary<int, SelectList>)ViewBag.Situation; } @using (Html.BeginForm()) { @Html.AntiForgeryToken() <header id="header" class="header"> ・・・ </header> <body id="body" class="body"> ・・・ <table class="table"> <tr> <th> <nobr>日付</nobr> </th> <th> <nobr>曜日</nobr> </th> <th style="text-align:center"> <nobr>始業時刻</nobr> </th> <th style="text-align:center"> <nobr>終業時刻</nobr> </th> <th style="text-align:center"> <nobr>休憩時間</nobr> </th> <th> <nobr>所定時間</nobr> </th> <th> <nobr>残業時間</nobr> </th> <th style="text-align:center"> <nobr>勤怠状況</nobr> </th> <th style="text-align:center"> <nobr>補助</nobr> </th> <th style="text-align:center"> <nobr>備考</nobr> </th> </tr> @for (int idx = 0; idx < Model.Kintais.Count; idx++) { <tr> @*土は青、日祝は赤にする*@ @{ string week = Model.Kintais[idx].date.ToString("ddd"); bool PublicHoliday = false; for (int i = 0; i < Model.PublicHolidays.Count; i++) { if (Model.Kintais[idx].date == Model.PublicHolidays[i].public_holiday) { <td class="red">@(idx + 1)</td> <td class="red">@week</td> PublicHoliday = true; } } if (PublicHoliday == false) { if (week == "土") { <td class="blue">@(idx + 1)</td> <td class="blue">@week</td> } else if (week == "日") { <td class="red">@(idx + 1)</td> <td class="red">@week</td> } else { <td class="black">@(idx + 1)</td> <td class="black">@week</td> } } } <td> @Html.EditorFor(model => model.Kintais[idx].open, new { htmlAttributes = new { @class = "form-control",style="text-align:center"} }) @Html.ValidationMessageFor(model => model.Kintais[idx].open, "", new { @class = "text-danger" }) </td> <td> @Html.EditorFor(model => model.Kintais[idx].close, new { htmlAttributes = new { @class = "form-control", style = "text-align:center" } }) @Html.ValidationMessageFor(model => model.Kintais[idx].close, "", new { @class = "text-danger" }) </td> <td> @Html.EditorFor(model => model.Kintais[idx].rest, new { htmlAttributes = new { @class = "form-control", style = "text-align:center" } }) @Html.ValidationMessageFor(model => model.Kintais[idx].rest, "", new { @class = "text-danger" }) </td> <td style="vertical-align:middle"> @Html.DisplayFor(model => model.Kintais[idx].worktime) @Html.HiddenFor(model => model.Kintais[idx].worktime) </td> <td style="vertical-align:middle"> @Html.DisplayFor(model => model.Kintais[idx].overtime) @Html.HiddenFor(model => model.Kintais[idx].overtime) </td> <td style="vertical-align:middle"> @Html.DropDownListFor(model => model.Kintais[idx].situation, dictionary[Model.Kintais[idx].situation], new { @class = "form-control", style = "width:130px;padding:5px" }) </td> <td style="width: 66px"> <nobr> <button type="button" onclick="setRegularWorkTime('@Html.IdFor(model => model.Kintais[idx].open)', '@Html.IdFor(model => model.Kintais[idx].close)', '@Html.IdFor(model => model.Kintais[idx].rest)')" class="btn btn-primary"> 定時 </button> </nobr> </td> <td> @Html.EditorFor(model => model.Kintais[idx].remark, new { htmlAttributes = new { @class = "form-control", style = "width:190px" } }) @Html.ValidationMessageFor(model => model.Kintais[idx].remark, "", new { @class = "text-danger" }) </td> @Html.HiddenFor(model => model.Kintais[idx].emp_num) @Html.HiddenFor(model => model.Kintais[idx].date) @Html.HiddenFor(model => model.Kintais[idx].id) </tr> } </table> </body> }
追記:
アノテーションで[Range(typeof(TimeSpan), "00:00", "23:59")]が使えそうなのですが、こちらの範囲内の数値を入力してもエラーと判定されてしまいます。どなたか分かる方がいましたら教えてください。
回答1件
あなたの回答
tips
プレビュー