2013-03-26 30 views
8

謎のビット。ModelStateは、空でない必須フィールドに無効とマークされます。

public class TradeSpendingSalesViewModel 
{  
    public string ProductCode { get; set; } 
    public IEnumerable<SelectListItem> AllowTypeSelect { get; set; } 
    public string AllowType { get; set; } 
    public IEnumerable<SelectListItem> YearsSelect { get; set; } 
    public int Year { get; set; } 
} 

が、私は私のコントローラへの空のviewmodel投稿する場合:次に

[HttpPost] 
public ActionResult Index(TradeSpendingSalesViewModel vm) 
{ 
    var allErrors = ModelState.Values.SelectMany(v => v.Errors); 
    foreach (var e in allErrors) 
    { 
     Response.Write(e.ErrorMessage); 
    } 
} 

を私はのメッセージを持つ単一のエラーが表示されます:「年のフィールドが必要とされて私は年プロパティでのviewmodelを持っています"

私はviewmodel YearフィールドにRequired属性で注釈を付けていないので、なぜこのエラーが生成されているのかはっきりしていません。

アイデア?

答えて

13

私が最初に推測したのは、あなたが年を設定していないこととnullであるという例外を投げていることでしょうか?あなたがnullableを年にした場合<int>それは必要なメッセージをスローしませんか?

、私はまだそれが必要とされると期待していない、それはデフォルトで暗い

+2

正確に正しいです。 –

15

値型が暗黙的にMVCでRequiredとしてマークされている中のショットです。これは、実際には目的別に行われています。これは、ディフィニションによるものがnull値ではないためです。

が、私はそれはあなたのケースでは正しくない場合は、そうでない場合は、int?としてYearを設定することをお勧め、あなたがGlobal.asax.csに

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

に変更されることがあります。

+1

上記の私の答えから私の考えを確認しました。+1: –

+2

Nullable以外の値は常に必要です。必須ではない整数値を使用する場合は、nullableとして設定する必要があります。 – TheBigCheese

関連する問題