2017-09-02 257 views
1

我有这种方法的一个问题:发送的请求体参数而不是查询字符串

$.ajax({ 
     url: '/SalesOfferInvoiceDeliveryNote/InsertUpdateCAORAC/?cTa=b&cHTML=' + cHTML, 
     type: 'POST', 
     data: $(this).parents('form').serialize() 
//other part of method not shown, it's not relevant 

在服务器端方法的签名是这样的:

public string InsertUpdateCAORAC(FormCollection form = null, string cTa = "", string cHTML = null) 

我的问题是,cHTML等(它表示用于打印的动态创建表单的HTML)变得太快而不能通过查询字符串发送。我希望这个参数在请求体内发送。我已经尝试过:

 $.ajax({ 
      url: '/SalesOfferInvoiceDeliveryNote/InsertUpdateCAORAC/', 
      type: 'POST', 
      data: { 
      form: $(this).parents('form').serialize(), 
      cTa: 'b', 
      cHTML: cHTML 
      } 

在这种情况下,参数CTA和cHTML正确sended,但表单元素失去所有它的序列化键。 (使用这种Ajax调用方式的键是:form,cTa和cHTML,这是完全错误的)。有什么我可以做的发送查询字符串正文内的所有参数,该表单不失去它的关键?

回答

2

你的问题是在这条线:

form: $(this).parents('form').serialize(), 

可以以创建表单键/值对使用FormData。你可以看看Using FormData Objects

为了增加额外的两个参数,你可以使用FormData.append()像:

formData.append('cTa', 'b'); 
formData.append('cHTML', cHTML); 

你的AJAX可以是:

var formData = new FormData($(this).closest('form')[0]); 
formData.append('cTa', 'b'); 
formData.append('cHTML', cHTML); 
$.ajax({ 
    url: '/SalesOfferInvoiceDeliveryNote/InsertUpdateCAORAC/', 
    type: 'POST', 
    data: formData 
}); 
+0

我收到此错误:遗漏的类型错误:非法调用 – FrenkyB

+0

@FrenkyB错误是因为你的服务器端** InsertUpdateCAORAC **错误。您需要删除cta和chtml参数,因为现在它们是表单的一部分,因此您可以像其他表单参数那样获取它们。让我知道。谢谢 – gaetanoM

相关问题