11

少し謎。Yearプロパティを持つビューモデルがあります:

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; }
}

空のビューモデルをコントローラーに投稿した場合:

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

次に、「年フィールドが必要です」というメッセージを含む1つのエラーが表示されます。

ビューモデルのYearフィールドにRequired属性の注釈を付けていないため、このエラーが生成される理由がわかりません。

何か案は?

4

2 に答える 2

17

デフォルトでは、ValueTypesRequiredはmvcのように暗黙的にマークされます。これらは定義上null許容ではないため、これは実際には目的のために行われました。

Yearとして設定することをお勧めしますint?。そうしないと、自分のケースで正しくない場合は、falseに変更される可能性があります

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

Global.asax.csで。

于 2013-03-26T17:43:56.893 に答える
15

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

私はまだそれが必要になるとは思っていません、それは暗闇の中でのショットです

于 2013-03-26T17:35:58.703 に答える