2017-11-03 23 views
0

ここでは、私はAJAXリクエストから投稿したいが、コントローラのアクションを打つポストアクションメソッドは助けてください。Web Api Post Failed Asp.net Mvc

[Route("api/agency/questionnairePagesubmit")] 
[HttpPost] 
public HttpResponseMessage questionnairesubmit(System.Web.Mvc.FormCollection form)//List<AttributeValueTB> QuestionnaireList, HttpPostedFileBase fileUpload 
{ 
    //some code here 
} 

アヤックス

$.ajax({ 
    type: "POST", 
    url: path, 
    contentType: 'application/json', 

    processData: false, 
    dataType: "json", 
    data: data, 

    success: function (result) { 

     if (result.sucess == "save") { 
      alert('Your form has been saved.'); 

     } 
     else if (result.sucess == "Submit") { 
      alert('Your form has been submitted.'); 
      window.location.href = result.Url; 
     } 
    }, 
    error: function (result) { 
     alert('Oh no '); 
    } 

}); 
+0

WebAPIコントローラの場合は、アクションのパラメータに '[FromBody]'属性を適用して、リクエスト本体からパラメータをマップする必要があります。それがFormCollectionの考えにマップできるかどうかはわかりません。投稿モデルを定義してみてください。 –

+1

あなたがajax.urlに割り当てる '経路'を明示してください – OlegI

+0

FormCollectionを取る代わりに、コントローラでJObjectパラメータを取る必要があります。 – Koderzzzz

答えて

0

を掲示するあなたは、インタフェースクラスにメタデータを追加しますか? メタデータ属性は、実装するクラスではなく、インタフェース内のメソッドに追加する必要があります。

[Route("api/agency/questionnairePagesubmit")] 
[HttpPost] 
HttpResponseMessage questionnairesubmit(System.Web.Mvc.FormCollection form); 

、あなたは以下のようにJSの変化やAPI側のカップル必要がある代わりにSystem.Web.Mvc.FormCollection form

+0

これは動作しません。 – DumpsterDiver

0

を使用してのパラメータとしてオブジェクトを定義してください:JSで を、あなたが「アプリケーション/ X-WWWを使用する必要がありますデータ型として - 体 - URLエンコード」と正しくフォームデータシリアライズすることで、データを送信する($( 『#1、Form1を』)(シリアライズ);。)

var fdata = $('#form1').serialize(); 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:2515/api/agency/questionnairePagesubmit", 
     dataType: 'application/x-www-form-urlencoded', 
     data: fdata, 
    }) 
    .done(function (data, textStatus, jqXHR) { 
      alert('Your form has been saved.'); 
    }) 
    .fail(function (jqXHR, textStatus, errorThrown) { 
     alert("error"); 
    }); 

あなたはjQueryの1.5を使用して上記されている場合は、行われ、失敗し使用することができます。

は、APIでは、以下のようにFormDataCollection代わりにFormCollectionを使用する必要があります。

[Route("api/agency/questionnairePagesubmit")] 
    [HttpPost] 
    public HttpResponseMessage questionnairesubmit([FromBody] FormDataCollection formData) 
    { 
     NameValueCollection formCollection = formData.ReadAsNameValueCollection(); 
     //other stuff using formCollection 
    } 

はそれがお役に立てば幸いです。

+0

大変ありがとうございます。@ ShahでもformDataにはまだnullがあります。 – DumpsterDiver

+0

JSでは、投稿要求を送信している間にcontentTypeとprocessDataを削除してください。 – Shah