2013-07-22 6 views
10

フォームの送信をajax呼び出しに置き換えようとしています。アクションはformcollectionを必要とし、私は新しいモデルを作成したくありません。だからフォーム全体を渡す必要があります(フォームのサブミットと同じですが)ajaxコールを使用します。 Jsonをシリアル化して使用しようとしましたが、formcollectionが空です。 これは私の行動の署名です:今、私はformcollectionにデータを渡すことができますどのようにアクションにajax呼び出しを使用してformcollectionを渡すには?

var form = $("#onlineform").serialize();    
      $.ajax({ 
       url: "/Register/CompleteRegisteration",     
       datatype: 'json', 
       data: JSON.stringify(form), 
       contentType: "application/json; charset=utf-8",     
       success: function (data) { 
        if (data.result == "Error") { 
         alert(data.message); 
        } 
       } 
      }); 

public ActionResult CompleteRegisteration(FormCollection formCollection) 

、ここでは、私のボタンのクリックを提出するのですか?

答えて

29

FormCollectionはキーと値のペアの数であるので、JSONは、その表現のために不適切なデータフォーマットです。代わりのPOSTに設定要求の

  1. タイプ(ここでは必要ありませんが、より自然なようだ)
  2. 直列化形式:

    var form = $("#onlineform").serialize(); 
    $.ajax({ 
        type: 'POST', 
        url: "/Register/CompleteRegisteration", 
        data: form, 
        dataType: 'json', 
        success: function (data) { 
         if (data.result == "Error") { 
          alert(data.message); 
         } 
        } 
    }); 
    

    主な変更:あなただけのシリアル化された形式の文字列を使用する必要がありますJSON文字列をリクエストとしてデータ

  3. contentTypeが削除されました - 私たちはもうJSONを送信しません
+0

「POST」行の後に「、」を付ける必要があります – PAVITRA

+1

@PAVITRA、ありがとうございました – Andrei

5

試行:

$(<your form>).on('submit',function(){ 
    $.ajax({ 
     url: "/Register/CompleteRegisteration" + $(this).serialize(), 
     // place the serialized inputs in the ajax call     
     datatype: 'json', 
     contentType: "application/json; charset=utf-8",     
     success: function (data) { 
      if (data.result == "Error") { 
       alert(data.message); 
      } 
     } 
    }); 
}); 
+0

ありがとうございます。送信するajax呼び出しをアタッチすることが重要でした! – Armen

1

誰かがFormCollectionに追加データを追加したい場合は、以下のように試してみることができます。

<script type="text/javascript"> 
function SubmitInfo() 
{ 
    var id = $("#txtid").val();  
    var formData = $('#yourformname').serializeObject(); 
    $.extend(formData, { 'User': id }); //Send Additional data 

    $.ajax({ 
     url: 'Controlle/GetUser', 
     cache: false, 
     type: 'POST', 
     dataType: 'json', 
     data: decodeURIComponent($.param(formData)), 
     success: function (data) { 
      $('#resultarea').html(data); 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      alert("AJAX error: " + textStatus + ' : ' + errorThrown); 
     } 
    }); 
} 

$.fn.serializeObject = function() { 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name] !== undefined) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 
<script/> 

アクションメソッド

public ActionResult GetUser(FormCollection frm) 
    { 
    int UserId = Convert.ToInt32(frm["user"]); 
    // your code 
    return Json(data, JsonRequestBehavior.AllowGet); 
    } 

は、詳細についてはリンクを参照してください。 http://geekswithblogs.net/rgupta/archive/2014/06/25/combining-jquery-form-serialize-and-json.stringify-when-doing-ajax-post.aspx

+0

スタックユーザーからの提案として、投稿とコードと説明を編集しました。 –

関連する問題