2010-11-27 8 views
1

は、だから私はタイプ文字列、のDateTimeOffsetとのTimeSpanのいくつかのプロパティを持つエンティティフレームワークを使用して設定するエンティティを持っています。ストリングに対するバリデーションを実行するために、私は "[必須]"または "[ストリング長]"のようなかなり単純な属性を使用しました。使用されるコントロールはテキストボックスです。検証のDateTimeOffsetとのTimeSpan

私の問題は今のDateTimeOffsetとのTimeSpanのためである、私が使用してどのような制御不確かだけど、さらに多くの不確実な入力を検証するために使用する属性かについて。

提案がありますか?

+0

入力を検証する方法は? – jfar

+0

Webブラウザの入力は通常、テキストとして入力され、MVCは型に変換しますが、「OOGABOOGA」がある場合は、確かにDateTimeOffsetとして機能しません。 –

答えて

0

入力からデータ型を推論する方法はないと思います。ビジネスロジックによって必要に応じてそれを扱うことが唯一の道であるようです。

-1

それはタイムスパンなので、あなたは、同等の分を取得し、その上IsNumeric関数呼び出しを行うことができます - シンプルなカスタム検証関数です。

2つの日付を使用して時間差分を計算する場合は、DateDiff関数を使用して差分を計算し、タイムパッセージを取得することができます。ただし、既にこれを持っている場合、タイムスパンは時間単位の数、したがって、カスタム関数を使用してIsNumericを使用してください。

それ以外の場合は、カスタム検証を書きたくない場合は、。それを行う最も簡単な方法は、RangeValidator属性を使用することです。可能な限り最小値と最大値を設定してください。この属性を使用して検証が行われると、数値ではないFalseが返されるため、それだけでは不正な文字列の検証が行われます。範囲が重要でない場合は、上限値を数百万分などの安全な値(例:Long.MaxValueまたはInteger.MaxValue)に設定します。

また、TimeSpan.Ticks()のように範囲と比較するタイムスパンの値としてTicksを渡すこともできますが、RangeValidatorにテキストボックスを送信するだけで十分です。テキストではないことを確認します範囲とボイラーを確認し、検証が完了し、カスタム検証の必要はありません。

は、私はあなたが一緒に取得し、必要に応じてどのように他の私はあなたを助けることができる方法を知ってみましょう。

+0

@byteあなたは可能な解決策を見る機会を得ましたか? –

+0

あなたの答えは確かに理にかなっていますが、データ型を取得した後でデータ型を検証する方法は実際にはなかったと思います。質問の背後にある目的は、選択肢があれば、どの入力タイプを使用するか(例えば、テキストボックスなど)でした。入力があれば、それが実際にDateTimeOffsetであることをどのように検証しますか?あなたの答えはあなたがすでにデータを持っていて、あなたが正しいタイプを知っていることを前提としています。 –

+0

@byteあなたが受け取っているものがわからず、検証中にそれを把握したい場合は、2つの非表示フィールドを日付として送信するか、確かに分かるか、または1つのテキストボックスフィールドをティック(timespan ticks )、この数値は常に非常に長い値になるので、数値であるかどうか、また数百万以上であるかどうかを常に確認することができます。これであなたの質問に答えることができない場合、私はおそらく質問を完全に理解していないのではないかと思います。それでも問題が解決しない場合は、おそらくurの質問を更新して詳細を詳しく説明してください。クール? –