2011-02-07 11 views
2

こんにちは皆さん。私は、MVCフレームワークが自動的にコントロールのdata-val *アトリビュートをワイヤリングする必要があるのか​​どうか、あるいはダイナミックコンテンツにアトリビュートを手動で作成して適用する必要があるのか​​どうか疑問に思っていましたか?ASP.NET MVC 3つの動的コントロールと控えめな検証

私は当初、メインのviewmodelに渡す部分図を呼び出すビューを持っています。この部分ビューは、メインビューモデルの複雑なプロパティにバインドされています。部分ビューには一連のカスケードドロップダウンリストが含まれています。私が@Html.Partial("PartialName", Model)への呼び出しを持っているページの初期ロード時に、適切な値を選択せず​​に送信しようとすると、2つのドロップダウンリストの検証が完全に機能します。私はまた、ページ上の別のボタンをクリックすると、ページ上の部分ビューの別のインスタンスが読み込まれます。私は今、彼らは同じモデルにバインドされているが、フォームにこれらのコントロールを提出しようとした場合、私は正しい.ValidationMessageForヘルパーを設定しているがと、検証はdropdownlistsは、データ-Valに生成されるように表示されませんので、彼らのために表示されません*属性。私はそれらが正しく現れるようにする方法はありますか? .ValidationMessageForに関連付けられている関連する<span />タグも生成されていないことに気付きました。誰もこの問題に遭遇しましたか?そうなら、どのように解決しましたか?ここでUPDATE

は、私は、ボタンのonClickイベントに部分的にロードするために呼び出すJavaScript関数です:

function AddNewVehicle() { 
$.ajax({ 
     type: 'GET', 
     url: '/ReservationWizard/AddVehicleToReservation', 
     data: $('#reservation-wizard-form').serialize(), 
     dataType: 'HTML', 
     async: true, 
     success: function (data) { 
      if (data != null) { 
       $('#vehicle-selection-container').append(data); 
      } 
     } 
    }); 
} 

答えて

7

問題は、フォームのコンテキスト内でない場合には、 TextBoxForなどのHTMLヘルパーは、クライアントの検証データ属性を出力しません。最初にページが読み込まれたときにの中にHtml.RenderPartialが呼び出されますが、AJAXを使用してフォーム要素を追加すると、このフォームコンテキストはなくなり、data-*クライアント検証属性は生成されません。一つの可能​​な解決策は、部分的に内部のフォームを配置し、$.validator.unobtrusive.parse('#vehicle-selection-container')を使用してクライアントの検証ルールを再解析するAJAX呼び出しの際に、成功コールバックでフォーム全体を更新することです。

しかし、部分的に1つの要素だけを残しておきたい場合は、自分自身でかなりです:-)ここではあなたのシナリオをカバーするblog postです。

だから私は何を言うことができます控えめなクライアント検証が紙とスコット区のブログ投稿ではなく、人々がその限界を実現するために開始し、現実世界のアプリケーションの開発のいくつかの段階で、素晴らしいです。それがjquery.validateプラグインを直接使用し、MS jquery.unobtrusiveを使用しない理由の1つです。そして、はい、私はJavaScriptのサーバー検証ロジックを繰り返すことを知っています。はい、私は完全なコントロールがあるので気にしません。ああ、サーバー上で私はクライアント側の部分とほぼ同じ理由でデータ注釈の代わりにFluentValidation.NETを使用します:-)

MVC 4で多分いつかはMicrosoftが最終的に検証の権利(命令的なものと宣言的なもの)を作るでしょう。この日が来るまで、回避策を探しているだけです。

+0

は、あなたがライブラリの上記の名前スタックを使用して、それを実装しているかのサンプルを持って起こるでしょうか?これを私のプロジェクトに取り入れる作業に気分をけることができます。ありがとうございました。 – mreyeros

+0

@mreyeros、残念ながら、パブリックドメインですべての概念を共有できる完全なサンプルはありません。しかし、サーバー側の検証ロジックのために、FluentValidation.NETには優れたドキュメント(http://fluentvalidation.codeplex.com/documentation)と素晴らしい[ASP.NET MVCとの統合](http://fluentvalidation.codeplex.com/ wikipage?title = mvc&referencingTitle =ドキュメント)。サーバー側の検証ロジックを実行すると、クライアント側の検証は[jquery validate plugin documentation](http://docs.jquery.com/Plugins/Validation)に従います。 –

+0

そして明らかに、いくつかの概念を実装する上でいくつかの困難に遭遇した場合、あなたのコードをSOに表示して遭遇していた問題を説明するのをためらってはいけません。 –

関連する問題