1

他の2つのモデルを含むビューモデルがあります。どちらにも必須のフィールドがあります(エンティティフレームワークで実行)。

    public class featureModel
    {

        public FEATURE FEATURE { get; set; }


        public REQUIREMENTS REQUIREMENTS { get; set; }
    }

私のページには、次のように入力されたドロップダウンリストがあります

ViewBag.FEATURE_ID = new SelectList(db.FEATURE, "FEATURE_ID", "Name_");

ビューで

@Html.DropDownList("FEATURE_ID", "ADD FEATURE")

これは、見つかったすべての機能のドロップダウンリストであり、上部に[機能の追加]オプションがあります(これを選択すると、ユーザーが入力する必要のあるフィールドを表示するためのjsがいくつかあります)。このオプションが選択されている場合、ユーザーは特定のフィールドを入力する必要がありますが、そうでない場合は入力する必要があります(フィールドは非表示になります)。私のページが検証するとき、これを入力する必要があります。これは検証の観点からは理にかなっています。

ドロップダウンリストが特定のオプションにある場合に、この検証を無視する条件を設定する方法はありますか?

4

3 に答える 3

1

非表示フィールドのjquery検証を無視したいと思います。あなたはこれを試すことができます。

  var validator = $("#formId").data('validator');
  validator.settings.ignore = ":hidden"; 

サーバー側で、ModelState@Forty-Twoが言ったようにエラーをクリアします

于 2012-10-23T16:58:42.703 に答える
0

ViewModelに実装System.ComponentModel.DataAnnotations.IValidatableObjectし、そこで検証を実行します。

public class featureModel : IValidatableObject
{
    public FEATURE FEATURE { get; set; }
    public REQUIREMENTS REQUIREMENTS { get; set; }
    public bool FeaturesRequired { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (featuresRequired)
        {
            // do your feature check here
            if (FEATURE == null)
            {
                yield return new ValidationResult("You must enter a feature.");
            }
        }
    }
}

の値を提供する非表示のフィールドをビューに用意しますFeaturesRequired(これは、ドロップダウンのjavascriptを使用して行うことができますonchange)。これは、モデルの検証で確認できます。

控えめなajaxでIValidatable(クライアント側の検証)

クライアント側で検証するためのこのリソースをご覧ください。IValidatableObject

于 2012-10-23T14:53:56.940 に答える
0

「ページが検証されたとき」と言ったときにコントローラーでModelStateエラーを参照している場合は、次を使用できます。

ModelState.Clear()

すべてのエラーをクリアする、または

ModelState.Remove(string key)

特定のエラーをクリアします。ドロップダウンリストの値を確認してから、削除するモデルエラー(ある場合)を決定できます。

編集

jqueryの検証を無視する

$("#formId").validate({  //Your form id 
   ignore: "#ignoreFieldId"  //you can use any selector you want here: class, etc
})
于 2012-10-23T15:00:00.090 に答える