2017-11-03 2 views
0

여기에 아약스 요청에서 제출하지만 컨트롤러 작업을 부탁하지 게시 할 수있는 게시 작업 방법이 도움이됩니다.웹 Api 게시 실패 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); 

그리고 매개 변수로 객체를 정의하는 대신 System.Web.Mvc.FormCollection form

+0

이것은 작동하지 않습니다. – DumpsterDiver

0

당신은 JS의 변화 아래와 같이 API 측의 몇 필요 사용하십시오 : JS에서 을, 당신은 "응용 프로그램/X-WWW를 사용해야합니다 - 형-urlencoded로 데이터 형을 "정확하게 ($은 ('#의 유치원 1')) (직렬화가.) 양식 데이터를 직렬화하여 데이터를 전송

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