"Ajax.BeginForm"を使用してフォーム要素を含む部分をレンダリングする "投稿フィードバック"フォームがあります。 OnSuccessイベントは、ModelStateが有効でない場合でもトリガーします。これは正常ですか?モデルが有効でエラーがない場合、OnSuccessイベントがトリガされると、無効なモデルが返されるいくつかのポストバックを実行できることを期待していましたか?モデルが有効ではなくても、 "Ajax.BeginForm"はOnSuccessを実行します
答えて
これは正常ですか?
はい、もちろんです。サーバーがHTTP 200を送信すると、OnSuccessメソッドが呼び出されます。モデルステートの有効性の概念はサーバー側のみです。あなたのコントローラーアクションがいくつかのビュー/ partial/json/...を返す限り、OnSuccessがトリガーします。コントローラのアクション内で例外がスローされた場合、OnSuccessの代わりにOnErrorがトリガされます。
[HttpPost]
public ActionResult Process(MyViewModel model)
{
if (!ModelState.IsValid)
{
return Json(new { success = false });
}
return Json(new { success = true });
}
、その後:あなたがかもしれない無効なモデルの場合、今
function success(result) {
if (result.success) {
// the model was valid
} else {
// the model was invalid
}
}
だから、あなたのコントローラのアクションを持つことができ、この場合に対処するために、の線に沿って何かをしますフォームを更新してエラーメッセージをユーザーに表示します。この場合、あなたのフォームを部分的に配置することができます。無効なモデル状態が発生した場合は、コントローラのアクションから部分的なビューを返し、成功した場合はjsonオブジェクトを返します。ですから、テストすることができ、あなたの成功ハンドラで:
function success(result) {
if (result.success) {
// the model was valid
} else {
// there were errors => show them
$('#myform_container').html(result);
// if you are using client side validation you might also need
// to take a look at the following article
// http://weblogs.asp.net/imranbaloch/archive/2011/03/05/unobtrusive-client-side-validation-with-dynamic-contents-in-asp-net-mvc.aspx
// and reattach the client validators to the form as you are
// refreshing its DOM contents here
}
}
私はかなり単純なJavaScriptの技術を用いて、この問題を扱う:
まずセットアップこのようなあなたのOnSuccess
:次に
OnSuccess = "UpdateSuccessful(data)"
JavaScriptの機能のようなこれは:
function UpdateSuccessful(data) {
if (data.indexOf("field-validation-error") > -1) return;
// Do your valid stuff here
}
このように、混乱する必要はありませんお使いのコントローラi番目、あるいはもっと重要なのは、あなたのコントローラはすなわち、奇妙な何もせずにモデルエラーとPartial View
を返すことができます。
public ActionResult SaveDetails(Project model)
{
if (ModelState.IsValid)
{
model.SaveProject();
}
return PartialView("ProjectForm", model);
}
そして、あなたのAjaxOptions
に:
UpdateTargetId = "FormContents"
今ちょうどあなたが持っていることを確認してくださいdiv
など、フォームを表示したい場合はid="FormContents"
となります。
'OnSuccess =" UpdateSuccessful(data) "':本当に便利です。ありがとう。 –
この**データ '**オブジェクトはすべてのブラウザで機能しますか?何か制限や互換性の問題はありますか? –
これはJavaScriptが有効になっているすべてのブラウザで有効です。 –
は、次の操作を行うことができます。
var OnSuccess = function() {
if ($(".validation-summary-errors").length == 0) {
//Your javascript/jquery code goes here
}
}
わずかな変化をルイス答えに:
function OnSuccess() {
if ($("span[class='field-validation-error']").length == 0) {
alert("Target Platform saved Successfully.");
}
}
- 1. MVC3 Ajax.BeginForm ONSUCCESSはFirefoxで実行されません
- 2. Ajax.BeginFormはonSuccessを呼び出さない
- 3. ASP.NET MVC3 AJAX.BeginForm AjaxOptions OnSuccess OnSuccess OnFailure問題
- 4. ASP.NET - Ajax.BeginForm OnSuccessパラメータでコールバック
- 5. MVC Ajax.Beginformコントローラコールの前にOnComplete/OnSuccessが発生しました
- 6. モデルが有効でない場合、エラーメッセージ
- 7. asyncHttpClient onSuccessまたはonFailureを実行しない
- 8. PNCTLは、PHPで有効になっていなくても
- 9. Rails 3モデルは有効ではない場合に有効
- 10. 実行先が有効でないスキームを実行するXcode
- 11. アプリをproguarding後にエスプレッソを実行しているではなく、私が有効になって
- 12. 私の$ .getJSONは動作しますが、onsuccess部分を実行しないのはなぜですか?
- 13. SVMアルゴリズムが有効なモデルです
- 14. デザインタイムパッケージでは、uriは有効ですが、実行時には有効ではありませんか?
- 15. Xサーバを実行しなくてもSeleniumスクリプトを実行できますか?
- 16. データベースカスケードを有効にしなくてもHibernate Cascadeを使用できますか?
- 17. 「デバッグ」ではなく「実行」を選択してもEclipseブレークポイントがヒットする
- 18. Ajax.BeginFormではなく、ターゲットIDに
- 19. AsyncHttpClient JSON onSuccess関数が実行されていません
- 20. Javaが実行されているOSは、 "\ n"は有効な改行シーケンスではありませんか?
- 21. モデルとJqueryに基づいて有効または無効にします
- 22. すべてのクエリまたは何も実行しないでください
- 23. モデルのない単純なコントローラは有効なアーキテクチャですか?
- 24. Corsが有効になっていても、Web Api 2で有効なトークンを取得できません
- 25. 他のプロファイルが有効になっていない場合は、Mavenプロファイルを有効にしてください。
- 26. タスクトレーにいなくてもスクリプトを実行するには?
- 27. 単純なHibernateプロジェクトを実行しても効果がありません
- 28. skip-name-resolveを有効にしてもMySQLのリモート接続が遅くなる
- 29. 有効なURLは有効なURLではありません
- 30. レール4で有効なレールが有効になっています:それは正しいですか?
私はこれはで動作するように、不必要に複雑であることに同意します。明らかに、モデルが有効かどうかを示す簡単な値が必要です。 –