无法使用ajax在asp.net mvc 4中发送参数

时间:2014-09-05 01:04:59

标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-4

我正在尝试使用ajax将表单数据发送到操作方法,但它无法正常工作,如果我尝试不使用ajax,那么它可以正常工作。我搜索过网络但找不到合适的解决方案,我正在分享我的代码,请指导我。

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);
}

如果我通过ajax发送表单,我得到“请求”为空,没有ajax它正在工作。请指导我

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

更新

尝试过斯蒂芬法典

$('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;
});

它只是调用错误函数“Some Error Occured!”

1 个答案:

答案 0 :(得分:0)

使用.serialize()未序列化提交按钮。来自jquery documentation

  

注意:只有“成功控件”被序列化为字符串。没有   由于表单未提交,因此提交按钮值已序列化   使用按钮。

在任何情况下,ticketDetail也将为空,因为您已经为控件命名,并且您的html包含所有这些重复ID

修改

要回发相关提交按钮的值,请修改脚本以处理按钮的.click()事件

$('button[type="submit"]').click(function(e) {
  e.preventDefault();
  var dd = $(this).serializeArray(); // serialize the form values
  dd.push({ request: $(this).val() }) // add the value of the button that was clicked
  $.ajax({
    .....
  });
});