web-dev-qa-db-ja.com

MVC .Net Core Model Validation-値 ''は無効です。エラー

MVC .Net Coreでモデル検証を使用しようとしていますが、このデフォルトエラーメッセージ「値 ''は無効です」を置き換えることができません。

理論的には、モデルでErrorMessage注釈を使用して、独自のカスタムエラーメッセージを置き換えることができます。しかし、私はこれを機能させる方法を見つけることができませんでした。

私のモデル

[Required(ErrorMessage = "Date Required")]
[DataType(DataType.Date, ErrorMessage = "Invalid Date Format")]                
[Display(Name = "Appointment Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime AppointmentDate { get; set; }

上記のように、ErrorMessageタグとRequiredタグの両方に異なるDataTypeを配置します。

私のhtmlビュー

    <div class="col-md-2">
        <input class="form-control" asp-for="AppointmentDate">
        <span asp-validation-for="AppointmentDate" class="text-danger"></span>
    </div>

enter image description here

このエラーメッセージを置き換える方法を教えてください。ありがとう。

16
TTCG

Required属性を機能させるには、フィールドをnull可能にする必要があります。

public DateTime? AppointmentDate { get; set; }

編集DataType属性は実際にフィールドの検証を実行しないことにも注意してください。 postデータからmodelにバインディングを適用するときのMVC検証日付

17
Denis Krasakov

同じ問題を抱えているが、問題を検出できない。デバッグモードでオブジェクトをチェックして、どのプロパティがモデル状態に失敗するかを確認する方法があるかどうかを確認しました。

Debug mode view of the modelstate object

次に、どのモデルが失敗するかを確認します。それはチェックボックスにマップするブール値です

奇妙な部分は「これは必須フィールドではありません」です!

疑問符を追加し、使用するときにgetvalueordefaultメソッドを使用しました

public bool? IsCorporateAccount { get; set; }
2
Ozan BAYRAM

私の特定の問題は、モデルからのカスタムメッセージの代わりに同様のメッセージを表示する選択オプションの検証に関係していました。検証済みプロパティをNULL可能にすることに関する答えに加えて、DOM要素の実際の値を再確認してください。私の問題は、null許容値と空の文字列をintであると想定されるデフォルトオプションの値として追加することで解決しました。

<select asp-for="@Model.Thing" asp-items="Model.Things"
    <option value="" selected>Please select a Thing</option>
</select>
<span asp-validation-for="@Model.Thing" class="text-danger"></span>
0
tnJed

私の問題は、作成アクションで、エンティティを更新せずにビューを返すことでした。それを変更すると、Return View(new MyEntity());が問題を修正しました

0