2

Entity Framework の新機能を体験するために、新しい MVC 4 インターネット アプリケーションを作成しました。
これを既存のデータベースに接続し、dbContext ジェネレーターで Model クラスを生成しました。

アプリケーションを実行すると、フォームの編集中にいくつかの検証エラーが発生しました。DateTime フィールドの例として、日付が 2012-10-12 ではなく "12/10/2012" として挿入された場合 (SQ サーバー表記のように)、システムはエラーを出していました。
プロジェクトで検証コードを見つけようとしましたが、生成されたコードのどこにも見つかりませんでした。

私のモデルクラスの1つは次のとおりです。

public partial class Artist
{
    public Artist()
    {
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public Nullable<System.DateTime> DateOfBirth { get; set; }

    public virtual Countries Countries { get; set; }
}

データベース ファースト アプローチを使用する場合、検証エラーをカスタマイズするにはどうすればよいですか?
検証属性でモデルを装飾すると、モデル クラスが再度生成されると、モデルは消去されます。

さらに、既存のデータベースの使用が必須である「現実世界」のプロジェクトでは、モデル クラスを開発するための最良のアプローチは何でしょうか?
同じ名前の部分クラスを追加して自動生成されたクラスを拡張しますか?

編集 (ビューの導入部分):

@using (Html.BeginForm()) {
@Html.ValidationSummary(false)

<fieldset>
    <legend>Movie</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.DateOfBirth)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.DateOfBirth)
        @Html.ValidationMessageFor(model => model.DateOfBirth)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}
4

2 に答える 2

6

まあ、いつでもメタデータクラスを使用できます

public partial class ArtistMetaData
{
   [Required]
   [StringLength(20)]
   public string Name;//it can be a field instead of a property, must just have the same name and type than in your Model class
}

そして部分クラス

[MetadataType(typeof(ArtistMetaData)]
public partial class Artist {
}

または(私の好みの解決策)、優れたFluentValidationのような外部検証ライブラリを使用できます

デフォルトで「基本的な」検証があり(global.asaxで削除できます)、次をチェックします:nullableでない値...がnullではないこと(デフォルトの必須属性のように)、および値が正しいタイプであること.

于 2012-10-09T19:50:20.027 に答える
1

ブラウザーとマシンのカルチャ設定を確認してから、jquery 検証カルチャを確認してください。

スペイン語の設定があるため、この問題が発生する傾向がありますが、mvc には英語の日付と通貨形式などが付属しています。たとえば、dd/mm/yyyy 対 mm/dd/yyyy です。

正規表現属性を使用して、必要に応じてフィールドを検証することもできます。

于 2012-10-10T11:14:08.360 に答える