前提・実現したいこと
TextBoxFor メソッドで、
mm:ss
分と秒のフォーマットを指定したいですが可能でしょうか。
環境:
windows10 pro
MVC5
試したこと
色んなサイトを参照し、以下のようにフォーマットを試しました。
model
1 [Display(Name = "時間")] 2 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:mm\:ss}")] 3 public TimeSpan? TimeFrom { get; set; }
view
1 <div> 2 @Html.TextBoxFor(m => m.TimeFrom, "{0:mm\:ss}", new { placeholder = "00:00" }) 3 </div> 4 5 <div> 6 @Html.ValidationMessageFor(m => m.TimeFrom, "", new { @class = "text-danger" }) 7 </div>
これでこのテキストボックスに例えば、
30:00
と入力後にclickイベント等を発火すると、ValidationMessageForで
値 '30:00' は 時間 に対して無効です。
が表示されます。
しかし、
23:59
など24:00を超えない値はエラーが表示されません。
これを解決することはできますでしょうか。
よろしくお願いいたします。
ASP.NET MVC の話ですよね? であれば、ASP.NET のタグを付けてください。
あと、MVC4 とのことですが間違いないですか? (実は、MVC5 とか Core ということはありませんか?)
すいませんMVC5でした。
タイトルは「mm:ssのフォーマットを指定したい」となっていますが、それは TextBoxFor の第 2 引数に "{0:mm\\:ss}" を設定することで既にできているようですが?
実際に解決したい課題はフォーマットの指定ではなく、
> 23:59など24:00を超えない値はエラーが表示されません。これを解決することはできますでしょうか。
ということですか? であれば、どういう条件でエラーにしたいのですか? 上記ではその条件が分からないのですが。
「試したこと」でエラーが表示されるということは、
正しいフォーマットの指定ではない
と質問を書いた直後そう思いました。
例えば、引数の設定の仕方が間違っているなど。
タイトルで「mm:ssのフォーマットの指定をしたい」にしたのは、
大きな枠組みでそう書いたのであり、厳密にいうと
「自分が試した方法ではエラーが出たので、正しいフォーマットの指定をしたい」
になります。
フォーマットの指定においてエラーを出す条件も必要ということでしょうか。
どういう条件でエラーにしたいというかというのは、
「00:00以下」または「59:59以上」
になります。
質問者さんの言うフォーマットの指定(TextBoxFor の第 2 引数に "{0:mm\\:ss}" を設定)はあくまでブラウザ上での表示だけの話。エラーはテキストボックスの値をブラウザからサーバーに送信した時にサーバーで受け取った値が有効か否かを判定した結果です。その 2 つを混同しているようですが、全く違うものと認識してください。
フォーマットを指定してテキストボックス上の表示が期待通りできたからと言って、それはあくまでブラウザ上の表示だけの話であって、ポストされた値のサーバー側での解釈は関係ないです。12:34 という文字列がブラウザから送信されてきたら、サーバーは 12 時間 23 分と解釈します(12 分 34 秒ではありません)。
ありがとうございます。
確かにサーバー側ではhh:mmになってるので、受け取った値に対してmm:ssにするよう
変えてあげないといけないですね。
「受け取った」というのはどの時点のことを言ってますか?
例えば、前にやったように 30:00 とブラウザに表示されたテキストボックスに入力して送信ボタンをクリックしたときは、アクションメソッドで受けとる前にサーバー側のどこかの処理で hh:mm と判断されてエラーになったのですよ。
「変えてあげる」機会はないです。なので、回答に書いたように hh:mm:ss 形式で入力する他ないです。
理解してないようです。
回答1件
あなたの回答
tips
プレビュー
