46

このフィールドがあり、何らかの理由で[送信]をクリックすると、フィールドが必須であるという検証メッセージが表示されます。

[DisplayName("Total Budget:")]
public double Budget { get; set; }

@Html.EditorFor(model => model.account.Budget)
@Html.ValidationMessageFor(model => model.account.Budget)

public class Account
{
    [DisplayName("Total Budget:")]
    public double Budget { get; set; } //dropdown
}
4

7 に答える 7

109

MVC に組み込まれている DefaultModelBinder は、int、DateTime、decimal などの値の型に対して必要なデータ型の検証を実行します[Required]

これをオプションにするには、null 許容として定義する必要があります。

public double? Budget { get; set; }
于 2012-11-08T16:40:27.633 に答える
8

double値型です。値の型には、値を設定していなくても、常に値が含まれます。その値は、そのタイプのデフォルト値です (この場合は0.0)。すべての値の型は、フレームワークで必要に応じて処理されます。これを回避する唯一の方法は、カスタム モデル バインダーを作成することですが、モデルに既定値が含まれるのを防ぐことはできません (入力されていないとは言えないため)。

そのため、カスタム バインダーを作成したとしても、モデルを処理するときに、誰かが入力し0たのか、それが単なる既定値だったのかを判断することはできません。

Nullable<double>したがって、唯一の本当の解決策は、ビュー モデルを変更して、 (省略形は is )などの null 許容型を使用することdouble?です。

于 2012-11-08T16:49:35.107 に答える
2

予算を から に変更する可能性がありdouble ますdouble?

おそらく、この属性をコントローラーに追加してみてください

BindExclude([Bind(Exclude="Budget")])同じように

于 2012-11-08T16:32:54.123 に答える