2009-04-02 11 views
0

データベースに「Nullでない」プロパティを持つ整数型のフィールドがあります。ASP.NET MVCビューでInteger型フィールドのnull値をチェックする方法は?

ビューを作成するとき&フィールドを空白のままにした場合、0と見なされるので、誰かが値0を挿入するとエラーと見なされるので、それを0と見なします。

もう1つの問題は、「ASP.NET MVC 1.0」@ Scott Guブログに記載されているようにモデルエラーを使用していることです。そして、(LINQ-To-SQLによって作成された)オブジェクトの部分クラスの値をチェックしています。すなわち

public partial class Person 
{ 
    public bool IsValid 
    { 
     get { return (GetRuleViolations().Count() == 0); } 
    } 
    public IEnumerable<RuleViolation> GetRuleViolations() 
    { 
     if (String.IsNullOrEmpty(Name)) 
      yield return new RuleViolation("Name is Required", "Name"); 
     if (Age == 0) 
      yield return new RuleViolation("Age is Required", "Age"); 
     yield break; 
    } 
    partial void OnValidate(ChangeAction action) 
    { 
     if (!IsValid) 
      throw new ApplicationException("Rule violations prevent saving"); 
    } 
} 

範囲にも問題があります。

私がsmallintすなわちshortをc#で宣言すると、データベースに似ていますが、その範囲を超えると "値が調整されました"というエラーが表示されます。

最後に、ASP.NET MVCで検証するための最良の方法がありますか?

答えて

1

null可能な型でコードを変更することはできますか?

Dim i As Nullable(Of Integer) 


    MsgBox(i.HasValue) 
    'result is false 

    i = 1 
    MsgBox(i.HasValue) 
    'result is true 

    i = Nothing 
    MsgBox(i.HasValue) 
    'result is false 
0

私は本当にMVCの詳細についてはスピードアップしていませんが、年齢のデフォルト値を-1に変更する方法はありませんか?この方法でチェックする価値があり、人々は依然として0を入力することができます。

もう1つの解決策は、null可能なintを使用することです。これを行うには、?タイプに。

HTH。

ジョナサン

+0

として保存されます。しかし、我々は、任意の値を入力してくださいいけない場合、それ0と見なして-1でチェックすることはできません。 – Vikas

+0

私はここであなたの言うことを得ることはありません。デフォルト値はデフォルト値です(値が設定されていない場合は常にこの値を持つ必要があります)。 null可能な型を意味する場合、何も設定されていなければ、値はnullです。 –

0

私はまずクライアントのフォームを検証します。年齢が0の場合は、有効年齢ではないことをユーザーに知らせます。サーバー上のメッセージを変更、それは誤解です:

if (Age == 0) 
    yield return new RuleViolation("0 years is not a valid age", "Age"); 

私はあなたのPersonエンティティからモデルプロパティにバインドするので、それはデフォルト値として0を取得することを知っている - なぜあなたは、そのデータベースで、その後変更されません。 ?データベースのデフォルト値を、ユーザーの年齢に合った値に設定します。これにより、新しいエンティティに対して0として表示されなくなります。

db値を変更しない場合は、jQueryを使用して、読み込み時に作成ページのテキストボックス値を空の文字列に設定します。ユーザーがそのようなフォームを送信しようとすると、クライアントがそのフォームを許可しないようにすることができます。サーバー上で何もする必要はありません。ところで

、あなたが書いた:

を 誰かが値0を挿入する場合、私はので、0とそれを比較することはできません、それは エラー

とさせていただきます私はしないでくださいこの特定のドメインモデルの問題を参照してください。 0歳が良い価値だと思いますか?自問してみてください。

0

ユーザーが値を入力した場合uがこのGetNullableInt32()機能をオンにした場合Utilities.GetNullableInt32(textbox1.Text.Trim());

でそれを確認し、「0」、それはあなたのテーブルでNUll

関連する問題