2012-01-31 3 views
6

私はintを持っていますか?必要に応じてクライアント側で検証されるビューモデルのプロパティです。つまり、フィールドを空白のままにしておくと、それは送信されません。文字列のプロパティでも同じことは起こりません。なぜ私のintですか?必要であるかのように検証されていますか?

私の編集者のためにレンダリングされたHTMLは次のとおりです。

<input type="text" value="" name="StatusIdSearch" id="StatusIdSearch" data-val-number="The field Status must be a number." data-val="true" class="text-box single-line"> 

私は何も番号ではないではありませんが、私は理由を判断できないため、data-val-numberがエラーを引き起こしていると考えています。

アイデア?あなたはこの問題を解決するために、Global.asaxファイルであなたのApplication_Startメソッドに次のコードを追加することができるはず

public class CompromissoSearchModel 
{ 
     // other properties removed for the sake of clarity 

     [Display(Name = "Status")] 
     [EnumDataType(typeof(StatusCompromisso))] 
     public int? StatusIdSearch { get; set; } 

     // other properties removed for the sake of clarity 
} 
+4

私たちにあなたのモデルを表示してください。 –

+0

@SergioTapia:ありがとうございました。私は質問を更新しました –

+1

ここに答えがありますか:http://stackoverflow.com/questions/4700172/unrequired-property-keeps-getting-data-val-required-attribute help? – hvd

答えて

1

編集

ビューモデル

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

+0

Scottさんありがとうございますが、null値の型がクライアントからnull値を受け入れることはありません。 –

+0

nullable値型のこの動作は直感的です。 –

3

あなたが見ているメッセージは、必須フィールドとは関係ありません。validatイオン。 ClientDataTypeModelValidatorProviderはクライアントの数値検証を追加し、型がnullableかどうかを無視するため、これが発生します。あなたがcheck the code yourself次のことができます。

private static IEnumerable<ModelValidator> GetValidatorsImpl(
    ModelMetadata metadata, 
    ControllerContext context) 
{ 
    Type type = metadata.RealModelType; 
    if (IsNumericType(type)) { 
     yield return new NumericModelValidator(metadata, context); 
    } 
} 

そしてIsNumericType実装:

private static bool IsNumericType(Type type) 
{ 
    // strip off the Nullable<> 
    Type underlyingType = Nullable.GetUnderlyingType(type); 
    return _numericTypes.Contains(underlyingType ?? type); 
} 

NULL可能で、いつでもその検証を取得するとはみなされませんので。解決策の点では、使用されているプロバイダからClientDataTypeModelValidatorProviderを削除するか、null可能性を無視しないカスタムのものに置き換える必要があります。

+0

angelo:私はまだあなたの答えを分析しています。私はちょうど新しいMVCプロジェクトとintを作成したので奇妙です[Required]プロパティは必須ですが、プロパティは必要に応じて検証されません。この特定のプロジェクトには奇妙なことがあります。期待された動作ではないようです。 –

0

私はまったく同じ問題を抱えており、解決策を見つけることができました。私はこれらの解決法のどれも私のために働かなかったので、私はこの問題を抱えている誰かのために私の解決策を投稿すると思った。

モデルのバインダーがフィールドを無効として検証していたのではなく、TryUpdateModelを使用しているときにviewmodelのnullableプロパティがデータベースエンティティでnullableでないという問題がありました。

より明確な説明:

TryUpdateModel(dbUser, "", new[]{ 
    "DecimalProperty" 
})); 

のviewmodelで "DecimalPropertyは" NULL可能だったが、それはdbUserのではNULL可能ではなかったです。

関連する問題