2012-03-30 10 views
6

プロパティ "CultureId"を持つモデルクラス "Country"には、必須としてマークされていません。別のクラス "CountryViewModel"は、同じプロパティ "CultureId"を保持しています。ASP.NET MVCは必須ではないフィールドにバリデーションを追加します

「作成」ビューをレンダリングするときに、データ注釈が追加されていないにもかかわらず、「CultureId」テキストボックスに検証データ属性が追加されていることがわかりました。

私はそのような行動の原因である可能性がありますどのような

@Html.HiddenFor(mode => mode.CultureId) 

を使用していますか?

おかげ

答えて

0

あなたはデータ注釈を使用することができれば、あなたはこのhttp://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

namespace MvcApplication1.Models 
{ 
[MetadataType(typeof(MovieMetaData))] 
public partial class Movie 
{ 
} 


public class MovieMetaData 
{ 
    [Required] 
    public object Title { get; set; } 

    [Required] 
    [StringLength(5)] 
    public object Director { get; set; } 


    [DisplayName("Date Released")] 
    [Required] 
    public object DateReleased { get; set; } 
} 

}

をチェックアウトする必要があり、それはあなたがデータベース側のモデルなしで検証を設定することができます。

+0

彼の問題は、プロパティに必須の設定方法ではなく、彼が実行している望ましくないhtml検証を避ける方法です。 さらに、属性を管理する方法は、動的データの典型で、MVCの通常の動作ではありません。 – themarcuz

+0

メタデータクラスが空の場合は、オーバーライド検証ルールになると思います。 –

12

私はあなたのCultureIdがintであると推測しています。 MVCは必須でないタグに自動的に必須のタグを追加します。 CultureIdがintであれば、それはまた、あなたの望ましい結果が得られます

ModelState["CultureId"].Errors.Clear(); 

if (ModelState.IsValid)  
    { 
     ..... 
    } 

:これを試して

+0

既に追加されていますが、まだ同じ動作です。 intをnullにできるようにしようとします。ありがとう – Bill

+1

良い答え。それは 'data-required'検証を取り除くために働きますが、Idは' int'なので 'data-val-number'を追加します。私は0のようなデフォルト値を設定することでそれを回避することができましたが、する必要はありません。 – eudaimos

+0

私の悪い - 検証は隠された入力のために 'data-val-number'をスキップしているように思われます – eudaimos

0

をのApplication_Startに

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

を追加し、これをオフにしたり、あなたのINTがNULL可能にするために

...

+1

これは実際の問題を避けるための少しのkludgeです。 [詳細についてはdskhからの回答](http://stackoverflow.com/a/9941032/237838)を参照してください。 –

8

ハンドリングにはいくつかの方法がありますe this-
a)。プロパティをNullableのようにします。

public int? Age { get; set; } 

b)とします。コントローラークラスで以下を使用してください。 -

ModelState["Age"].Errors.Clear(); 

c)を使用してください。スタートアップに追加 - DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

関連する問題