2016-04-15 23 views
2

ASP.NET MVC 5.2プロジェクトにjQuery.Validation 1.15.0がインストールされており、MVCの基礎を学び、モデルデータを検証します。MVC検証モデルの属性:クライアント側の検証が行われていない、サーバー側のみ

私が追加した検証属性がクライアント側の検証を生成し、すべてのクライアント検証が成功するまでポストバックが発生しないという印象を受けました。ただし、検証は一般的には有効ですが、たとえば、VendorIdの値が提供されていない場合でも、毎回ポストバックが発生します。

public class StateAssessmentViewModel 
{     
    [Required(ErrorMessage = "Vendor ID is required")] 
    [MaxLength(4, ErrorMessage="{0} can not be longer than {1} characters.")]  
    [Display(Name = "Vendor ID")] 
    public int VendorId { get; set; } 

    [Display(Name = "Effective Date")] 
    [DisplayFormat(DataFormatString = "{0:MM-dd-yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime EffectiveDate { get; set; } 
} 

ThisサイトではJavascriptがブラウザ、クロームV49で有効にされた場合の検証は、最初のクライアント上で実行する必要があり、それがあることを確認します。実際には、 "Effective Date"フィールドには動作するjQueryカレンダーがあるため、Javascriptが有効になっています。

なぜ検証がクライアント上で全く行われていないのかを特定するのに役立つ情報は何ですか?私は、ソース表示したときにここで

が生成htmlです:

<div class="form-group"> 
      <label class="control-label col-md-2" for="VendorId">Vendor ID</label> 
      <div class="col-md-10"> 
       <input class="input-validation-error form-control text-box single-line" data-val="true" data-val-maxlength="Vendor ID can not be longer than 4 characters." data-val-maxlength-max="4" data-val-number="The field Vendor ID must be a number." data-val-required="Vendor ID is required" id="VendorId" max="4" min="0" name="VendorId" type="number" value="3333a" /> 
       <span class="field-validation-error text-danger" data-valmsg-for="VendorId" data-valmsg-replace="true">The value &#39;3333a&#39; is not valid for Vendor ID.</span> 
      </div> 
     </div> 

を私も、ブートストラップを使用して、ベンダーIDフィールドの数値以外のキーストロークをフィルタリングしようとしているが、これは効果がありませんよ。私はまた、最大と最小の長さを設定して遊んでみました。

私はまた、EffectiveDateモデルプロパティのDisplayFormat属性にクライアント側の効果があることを期待していました。それはしませんでした。ここで「ソースの表示」

<div class="form-group"> 
    <label class="control-label col-md-2" for="EffectiveDate">Effective Date</label> 
    <div class="col-md-10"> 
     <input class="input-validation-error form-control text-box single-line" data-val="true" data-val-date="The field Effective Date must be a date." data-val-required="The Effective Date field is required." id="txtEffectiveDate" name="EffectiveDate" type="datetime" value="" /> 
     <span class="field-validation-error text-danger" data-valmsg-for="EffectiveDate" data-valmsg-replace="true">The Effective Date field is required.</span> 
    </div> 
</div> 

をやってから生成されたHTMLは、理由はクライアント側は検証が発生していないのですか?

+0

'BungleConfig.cs'クラスにjquery検証ライブラリを含めていますか?その場合は、そのスクリプトバンドルをレイアウトファイルに含めますか?それはそれがそれだった – mituw16

+0

を生成しているHTMLを与えられて動作する必要があります。私はそれを捕まえなかったことに驚いています。それを答えにして、私はそれをそうとマークします。ありがとうございました! – ChadD

+0

お手伝いします!古い第二の目のトリック:) – mituw16

答えて

4

あなたはBungleConfig.csクラスにjquery検証ライブラリを含めていますか?その場合は、そのスクリプトバンドルをレイアウトファイルに含めますか?それは、それが生成しているHTMLを与えて、動作しているはずです

+0

もし私がそれを正しければ、私はこれらのスクリプトファイルの両方が必要だと思う。 1つまたは2つを削除するとエラーが発生しました。両方を含む、働いた。 bundle.Add(new ScriptBundle( "〜/ bundles/jquery-validation"))。(〜"〜/ Scripts/jquery.validate.min.js"、 "〜/ Scripts/jquery.validate.unobtrusive.min.js "))); – ChadD

関連する問題