2014-09-05 2 views
0

ajax를 사용하여 작업 방법으로 양식 데이터를 보내려고하지만 작동하지 않습니다. 아약스없이 시도하면 완벽하게 작동합니다. 인터넷을 검색했지만 적절한 해결책을 찾지 못했습니다. 제 코드를 공유하여 알려드립니다.ajax를 사용하여 asp.net mvc 4 매개 변수를 보낼 수 없습니다

HTML :

<form action="/sp/operate?id=38" id="PartialFormSubmit" method="post">  
<table id="MainTablePartial"> 
    <thead> 
     <tr> 
     <th style="width: 8px;"> 
      <input type="checkbox" id="selectAll" /> 
     </th> 
     <th> 
      Part No 
     </th> 
     <th> 
      MFG 
     </th> 
     </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td> 
      <input checked type="checkbox" name="CheckBox" class="checkboxes" /> 
     </td> 
     <td> 
     <input type="text" name="PartNumber" id="PartNumber0" readonly value="2005137-2" style="width:180px;" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input checked type="checkbox" name="CheckBox" class="checkboxes" /> 
     </td> 
     <td> 
     <input type="text" name="PartNumber" id="PartNumber0" readonly value="2005137-2" style="width:180px;" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <input checked type="checkbox" name="CheckBox" class="checkboxes" /> 
     </td> 
     <td> 
     <input type="text" name="PartNumber" id="PartNumber0" readonly value="2005137-2" style="width:180px;" /> 
     </td> 
    </tr> 
</tbody> 
</table> 
<button type="submit" name="request" value="Quote" class="btn yellow">Send Quote</button> 
<button type="submit" name="request" style="margin-left:220px;" value="NoStock" class="btn red box">No Stock</button> 
</form> 

jQuery를 :

$("#PartialFormSubmit").on('submit', function (e) { 
    e.preventDefault(); 
    var dd = $(this).serialize(); 
    $.ajax({ 
     type: "Post", 
     url: $(this).attr("action"), 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     data: JSON.stringify(dd), 
     success: function (data) {    
      alert(data); 
     }, 
     error: function (jqr, errorStatus, errorThrow) { 
      alert("Some Error Occurred! "); 
     } 
    }); 
    return false; 
}); 

MVC 작업 : 내가 아약스를 통해 양식을 보내는 경우

[Route("operate")] 
[HttpPost] 
[AcceptVerbs(HttpVerbs.Post)] 
public JsonResult PerformOperation(int? id, List<TicketDetail> ticketDetail, string request) 
{ 
    return Json("message",JsonRequestBehavior.AllowGet); 
} 

내가 아약스하지 않고, 널 (null)로 "요청"을 받고 있어요 그것은 효과가있다. 그것은이다

시도 스티븐 코드

$('button[type="submit"]').on('click', function (e) { 
    e.preventDefault(); 
    var dd = $(this).serializeArray(); 
    dd.push({ request: $(this).val() }) 
    $.ajax({ 
     type: "Post", 
     url: $(this).attr("action"), 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     data: JSON.stringify(dd), 
     success: function (data) { 
      alert(data); 
     }, 
     error: function (jqr, errorStatus, errorThrow) { 
      alert("Some Error Occurred! "); 
     } 
    }); 
    return false; 
}); 

: 나에게

===================

UPDATE를 안내하세요 그냥 오류 함수를 호출 "일부 오류가 발생했습니다!"

답변

0

제출 단추는 .serialize()을 사용하여 일련 화되지 않습니다. jquery documentation

참고 : "성공적인 컨트롤"만이 문자열에 직렬화됩니다. 단추를 사용하여 양식을 제출하지 않았으므로 제출 단추 값이 직렬화되지 않습니다. 방법의 당신이 당신의 컨트롤 이름하고 당신의 가치를 다시 게시하려면 모든 duplcate ID의

편집

와 잘못된 HTML을 가지고 있기 때문에 어떤 경우 ticketDetail에서

는 null가됩니다 관련 제출 버튼, 버튼의 .click() 이벤트를 처리하도록 스크립트를 수정하십시오.

+0

감사합니다. 이 문제를 해결하는 방법? – Anony

+0

제출 버튼을 클릭하고 name = "request"로 숨겨진 입력을 사용하고'serialize'를 호출하기 전에 값을 설정하도록 이벤트 핸들러를 연결하십시오. – Igor

+0

그럼'var dd = $ (this) .serializeArray(); dd.push ({request : someValue}); '를 사용할 수 있습니다. 그러나 보낼 버튼의 값은 어떻게 알 수 있습니까? 폼의'.submit()'이벤트가 아닌'.click()'이벤트를 처리해야합니다. –

관련 문제