1

次の問題に対する最善のアプローチを探しています。以前のドロップダウンリストで行った選択に基づいて入力された(または入力されていない)ドロップダウンリストがいくつかあるフォームがあります。リストにデータが入力されると、フィールドが有効になり、必須になります。リストが入力されていない場合、フィールドは無効になっているため、必須ではありません。データはSQLデータベースに保存されています。System.ComponentModel.DataAnnotationsの[Required]属性を各フィールドに適用しました。これはクライアント側では正常に機能しますが、モデルをデータベースに保存しようとすると、無効になっているフィールドごとにdbValidationErrorsが表示されます。

理想的には、依存リストから[Required]属性を削除して、モデルをデータベースに保存できるようにします。次に、MVCのクライアント側の検証を利用して、クライアント側でフィールドの要件を切り替える方法が必要になります。これにより、必要な各フィールド間で一貫したスタイルが維持されます。このリンクは、私が探しているものに沿っているようです。これが私のコードです:

function enableValidation(id, formId) {
    document.getElementById(id).setAttribute('data-val-required', '');
    document.getElementById(id).setAttribute('data-val', 'true');
    document.getElementById(id).setAttribute('class', 'input-validation-error');
    $.validator.unobtrusive.parse($(formId));
}

function disableValidation(id, formId) {
    document.getElementById(id).removeAttribute('data-val-required');
    document.getElementById(id).removeAttribute('data-val');
    document.getElementById(id).removeAttribute('class');
    $.validator.unobtrusive.parse($('#'+formId));
}

残念ながら、これはフォームが送信されたときに検証されません。私は何かが足りないのですか?

私はあなたが持っているかもしれない他のどんな提案にもオープンです。

4

1 に答える 1

0

リクエストごと:

ドメインモデルの代わりに、ビューモデルを使用して、そこにデータ注釈を配置することができます。そうすれば、データベースは[必須]フィルターについて認識しません。クライアント側の検証は変更されません。次に、ModelStateプロパティを使用して、コントローラーでサーバー側のチェックを実行できます。

于 2012-08-20T15:53:53.010 に答える