在请求体中发送参数而不是查询字符串

时间:2017-09-02 13:19:27

标签: c# jquery .net ajax

我对此方法有疑问:

 $.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被正确地发送,但是表单元素丢失了它的所有序列化键。 (使用这种ajax调用方式的表单键是:form,cTa和cHTML,这是完全错误的)。有什么办法可以在查询字符串体内发送所有参数,那个表格不会丢失它的密钥吗?

1 个答案:

答案 0 :(得分: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
});