2017-05-11 14 views
1

を発生しません提出、私は次のような形式がありますASP.NET MVC - AJAXフォームは私のpersonDetails.cshmtlファイルで適切なイベント

<form id="userUpdateForm" method="post"> 
    <fieldset> 
     <legend>User Details</legend> 
     <input type="checkbox" name="authorisedCheckbox" value="Authorised" id="authCheck" />Authorised<br /> 
     <input type="checkbox" name="enabledCheckbox" value="Enabled" id="eCheck" />Enabled<br /> 
    </fieldset> 
    <fieldset> 
     <input type="hidden" name="personId" id="idCheck" value='@ViewData["personId"]'> 
    </fieldset> 
    <input type="submit" value="Save Changes" name="Save Changes"> 
    <button type="button">Cancel</button> 
</form> 

を次のように私はその後さらにページの下Javascriptを持っている:

$('#userUpdateForm').submit(function (e) { 
     var personDetails = { 
      Enabled: $('#eCheck').val(), 
      Authorised: $('#authCheck').val(), 
      Id: $('#idCheck').val() 
     }; 

     $.ajax({ 
      type: "POST", 
      url: '<%= Url.Action("submitForm", "Home") %>', 
      data: JSON(personDetails), 
      //contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (result) { 
       '@Url.Action("Index", "Home")'; 
      }, 
      error: function (result) { 
       alert("A problem occured when submitting the form."); 
      } 
     }); 

     return false; 
    }); 

Javascriptは、[送信]ボタンが押されたときに起動されます。最初に、 'HomeController'の 'submitForm'メソッドが起動され、 'HomeController'の 'Index'にリダイレクトされてから、ビューが出力されます。

「submitForm」は現在、次のようになります。

 [HttpPost] 
     public ActionResult submitForm(JsonResult jsonForm) 
     { 
      System.Diagnostics.Debug.WriteLine("made it here"); 
      System.Diagnostics.Debug.WriteLine(jsonForm); 
      return View(); 
     } 

だから私の質問です:私はAJAXイベントの火を作るために現在の形で行方不明です何?私はそれがヒットするはずの方法からコンソール上に何も出力せず、アラートが存在しないので、現在発射していないと確信しています。

現在のところ、私は現在、チェックボックスをチェックオンロードに適切な場所に設定する別のJavascriptを持っているので、フォーム自体をあまり変更しないことにします。

編集:Stephen Mueckeのアドバイスで修正しました。私がここでやろうとしていることは、ヒットボタン - > submitFormメソッドの詳細をsubmitする - > submitFormメソッドは詳細を取り、データベース内のいくつかの処理を行います - >成功したときには成功します - >成功した場合、personDetails.cshtmlからindex.cshtml。

+2

'成功....それを愛する:機能(結果){ 'Url.Action( "インデックス"、 "ホーム")@'; } 'は何もしていません。これはタイプミスですか?あなたのネットワークタブをチェックして、ajaxコールが発砲しているかどうか、レスポンス本文に何が入っているかを確認しましたか?それが最も簡単な方法です。また、なぜあなたのajaxメソッドは "JsonResult"オブジェクトを受け入れていますか?これは_return_タイプでなければなりません。フォームフィールドに対応するviewmodelオブジェクトに対応する必要があります。 – ADyson

+2

そして、すべてのタグを含むHTMLページ全体を返すajaxメソッドからビュー全体を返すべきではありません。ページに挿入することはできません。いくつかのJsonデータ(JsonResultを使用)または部分ビューを返す必要があります。 – ADyson

+0

最後に、submitメソッドの最後から 'return false;'を実行するのではなく、e.preventDefault();をメソッドの最初の行に置く方が安全です。これにより、Javascriptが完了するまでに通常のポストバックが行われることはありません。 – ADyson

答えて

1

例:

モデル:

public class MyModel{ 
     public string Id {get;set;} 
     public string Authorised {get;set;} 
     public string Enabled {get;set;} 
    } 

処置:

[HttpPost] 
     public ActionResult submitForm(MyModel model) 
     { 
      System.Diagnostics.Debug.WriteLine("made it here"); 
      System.Diagnostics.Debug.WriteLine(jsonForm); 
      return View(); 
     } 

スクリプト:あなたはすべてのプロパティが含まれている必要があります一つの他のクラスを作成する必要が

$('#userUpdateForm').submit(function (e) { 
     var personDetails = { 
      Id: $('#idCheck').val(), 
      Authorised: $('#authCheck').val(), 
      Enabled: $('#eCheck').val() 
     }; 

     $.ajax({ 
      type: "POST", 
      url: '@Url.Action("submitForm", "Home")', 
      contentType: "application/json", 
      data: JSON.stringify({ model: personDetails }) 
      success: function (result) { 
       window.location.href = "/home/index/";    
      }, 
      error: function (result) { 
       alert("A problem occured when submitting the form."); 
      } 
     }); 

     return false; 
    }); 
2

そのあなた submitFormアクションメソッドにポストしています。

現在、あなたが投稿しようとしているプロパティを含まないJsonResultクラスを使用しています。ここでModelBinderはデータをバインドしません。 Model Binder ..Greatの記事を参照して...

public class personDetails { 
     public string Enabled {get;set;} 
     public string Authorised {get;set;} 
     public string Id {get;set;} 
    } 
[HttpPost] 
     public ActionResult submitForm(personDetails ObjpersonDetails) 
     { 
      System.Diagnostics.Debug.WriteLine("made it here"); 
      System.Diagnostics.Debug.WriteLine(jsonForm); 
      return View(); 
     } 
関連する問題