jQuery-UI用のAccordionプラグインを使用して、セクションに分割する大きなフォームがあります。
フォームの送信ボタンをクリックすると、MVCのサーバー側の検証では、フォームのすべての入力フィールドがチェックされるわけではなく、現在展開されているセクションのフィールドのみが検証されます。
この例では、[送信]をクリックすると、MVCはセクションAのみを検証します。セクションBまたはCがまだ入力されていない場合、クレイジーNullReferenceException
エラーがスローされます。MVC 4で、 1つだけを見るのではなく、アコーディオンのすべてのフィールドを検証する必要があります。
レンダリングされたHTMLを見ると、<div class="ui-accordion-content">
検証したい他のフィールドを保持する要素にはがありstyle="display:none"
ます。MVC 4で、表示されているフィールドに加えて、表示されていないフィールドを検証する必要があります。
編集:スタックオーバーフローには、jQueryバリデーター設定への追加が機能することを示唆する多くの回答がありignore: []
ます。それは私には機能せず、フォームは関係なく送信されます。
$("#GeneralForm").validate({
rules: {
GuestName: {
required: true,
},
GuestID: {
required: true,
}, // etc.
},
ignore: []
});
解決策は途方もなく単純なものになりました。2つのスクリプトがあります。1つはアコーディオンがインスタンス化されるスクリプトで、もう1つは検証が行われるスクリプトです。
@Scripts.Render("~/Scripts/Validation", "~/Scripts/Accordion")
順序は重要です。これら2つを切り替えると、問題が修正されました。
順序を逆にすると、次のようになります。
NullReferenceException
Entity Framework 5を使用している場合(db.SaveChanges()
具体的には)、後でランタイムエラーがスローされます。さらに、validator
必要なカスタムsubmitHandler
(パネルに含まれるフォームフィールドが有効かどうかに応じてパネルを開きます。両方の領域が検証テストに合格した場合にのみフォームを投稿します)および onsubmit: false
。デフォルトはtrue
です。それがtrueであり、カスタムsubmitHandlerを使用している場合、すべてがサイレントに内破します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加