如何将FormCollection作为Ajax数据发送

时间:2012-12-19 04:32:20

标签: c# ajax

我想将FormCollection发送到Ajax函数。

所以这是我的Ajax函数

function checkProductAttribute(productVariantId) 
{

  var form = $("product-details-form").serialize();

      $.ajax({

                    cache:false,
                    type: "POST",
                    dataType: 'html',
                    url: "@(Url.Action("CheckProductVariantToCart", "ShoppingCart"))",
                    data: { "productVariantId": productVariantId, "shoppingCartTypeId": 1, "form": form },
                    success: function (msg) {

                            if(msg == 'true' )
                            {

                    returnVal = true;
                    }
                    else
                    {
                    returnVal = false;
                    }

                    },
                    error:function (){

                     returnVal = false;
                        alert("fail");

                    }  
                });

   return true;
}

这是我的控制器

public bool CheckProductVariantToCart(int productVariantId, int shoppingCartTypeId, FormCollection form)
{   
     //Somthing here
     return true;
}

我的问题是   - 如何发送FormCollection认为Ajax函数?

2 个答案:

答案 0 :(得分:0)

如果您想要Javascript格式的强类型或复杂对象

您的控制器

public ActionResult CheckProductVariantToCart(int productVariantId, int shoppingCartTypeId, FormCollection form)
{   
     //Somthing here

     return Json(form);
}

Javascript角

success: function (result) {
  console.log(result);
}

答案 1 :(得分:0)

序列化表单是正确的。您可以将其发送到Controller,它将自动绑定到FormCollection。有几点需要注意

var form = $("product-details-form").serialize();

在此选择器中,您需要指定是按类(。)还是ID(#)查找。即$("#product-details-form).serialize();我猜你是否正在调试你的javascript这个变量没有存储任何东西?现在它正在寻找可能不存在的标签。 Here is another question描述了这一点。

第二,确保表单元素包含name属性。 Serialize只会序列化具有name属性集的元素。

最后,您的表单变量应该包含一个类似于myTextInput=helloworld&name=user1807766的字符串,该字符串将在服务器上更改为FormCollection。