2011-06-28 6 views
2

値の型(たとえばboolDateTime、列挙型など)を含むモデルがあり、[Required]属性のプロパティをマークしました。ASP.NET MVC - 値の型のサーバー側の検証

私はページを読み込み、何かに値を与えずにフォームを送信します。クライアント側の検証はオフになっています。明らかにModelStateは無効です。

ただし、フォームがクライアントに返されると、これらのフィールドにはタイプのデフォルト値が入力されます(false,DateTime.MinValue、最初の列挙値など)。これは本当に私が欲しいものではありません、私はフィールドが空のままにしたい。

現在、プロパティをnullにできるようにすることで、これを実現しています(例:bool?)。これは "正しい"ことですか? MVCが値型のプロパティにデフォルト値を自動的に設定しないようにするために何か他のことを行う必要がありますか?

+0

または、私は、文字列のみを持つView Modelクラスを使用する必要があると言われるでしょうか?残念ながら、それは少し遅れています。部分的には要件が原因で、部分的に私の経験不足が原因です。私は次のプロジェクトまでそれを保存します! –

+0

私はnull可能なオプションに固執します。これは私がやりたかったことであり、おそらくMVCクライアントサイド検証を使用せず、自分で作成することを除いて、より簡単な解決策を見つけることができませんでした。しかしそれはあまりにも多くの仕事のように思えた。 – dreza

答えて

1

フォームのフィールドを次の訪問時に空白にしたいとします。この場合、Nullableタイプはyesになる1つの方法です。ストリングスは別です。

注:私はViewModelでEnumを使用しないで、むしろヌル可能なintを使用する傾向があります。

もう1つの方法は、マップされていないコンボボックスでEnumを0にしておき、「Please Select」(値= 0)オプションを追加することです。この場合は、0が便利なので、null可能な型なしではより良い結果が得られます。

ドメインオブジェクトとは別個のViewModelを持っている場合は、これらのすべてがうまく機能します。それらの間のマップに相当するAutomapperを使用します。これにより、ドメイン層にあるものを損なうことなく、あなたのUI用に設計されたViewModelに1組の型を持たせることができます。

関連する問題