Javascript 从表单POST接收的对象为空

Javascript 从表单POST接收的对象为空,javascript,html,asp.net,asp.net-mvc,web-services,Javascript,Html,Asp.net,Asp.net Mvc,Web Services,我试图调用URL将对象转换为excel文件以供客户端下载,因此我使用以下HTML: <form id="downloadAsExcelForm" style="display: none;" action="global/DownloadFile" method="POST"> <input id="downloadToken" type="hidden" name="token" value="" /> <input id="complexObje

我试图调用URL将对象转换为excel文件以供客户端下载,因此我使用以下HTML:

<form id="downloadAsExcelForm" style="display: none;" action="global/DownloadFile" method="POST">
    <input id="downloadToken" type="hidden" name="token" value="" />
    <input id="complexObject" type="hidden" name="complexObject" value="" />
</form>
最后是以下Controller.cs:

public ActionResult DownloadFile(string token, wcfGlobal.complexObjectRequest complexObject)
{ 
    ...
}
我遇到的问题是,令牌接收得很好(它只是一个简单的字符串);但是,
complexObject
被接收为空


有人知道我如何解决这个问题吗?对于这些类型的请求,我通常只使用
jQuery.ajax(…)
,但是考虑到我需要直接下载文件,我这里没有这个选项。

在发送
req
对象之前,您正在序列化它,因此它是作为字符串发送的。没有一种方法可以自动将
complexObject
反序列化

在我看来,您可以继续以字符串形式发送复杂对象,并在控制器中对其进行反序列化

HTML

<form id="downloadAsExcelForm" style="display: none;" action="global/DownloadFile" method="POST">
    <input id="downloadToken" type="hidden" name="token" value="" />
    <input id="complexObject" type="hidden" name="complexObjectStr" value="" />
</form>

complexObjectStr变量应该是字符串,因为在使用stringify函数后,该值是字符串(而不是对象)。
在您的操作中(在控制器中),您必须将该字符串反序列化为wcfGlobal.complexObjectRequest。

控制器的类型为
controller
(例如MVC)或
ApiController
?@TasosK。哎呀,它是ControllerI类型的,我可能应该提到,也有对象数组被发送。我已经更新了.js部分来反映这一点哦,哇,我是个傻瓜。谢谢你的帮助!顺便问一下,您知道jQuery的ajax方法是如何将对象传递给Web服务的吗?如果有什么办法可以用表单来实现的话?很高兴我帮了忙!当你说webservices时,你的意思是
.asmx
?如果是这样,请参阅如何使用jQueryAjax调用它们。关于如何使用表单调用它们,我不确定这将如何工作,因为一个普通的HTTP帖子有
内容类型:application/x-www-form-urlencoded
,而
.asmx
期望
内容类型:application/json
我明白你的意思。这是有道理的。再次感谢!
<form id="downloadAsExcelForm" style="display: none;" action="global/DownloadFile" method="POST">
    <input id="downloadToken" type="hidden" name="token" value="" />
    <input id="complexObject" type="hidden" name="complexObjectStr" value="" />
</form>
// Required reference
using System.Web.Script.Serialization;

public ActionResult DownloadFile(string token, string complexObjectStr)
{
    wcfGlobal.complexObjectRequest complexObject = new JavaScriptSerializer().Deserialize<wcfGlobal.complexObjectRequest>(complexObjectStr);

    // Now complexObject has the values you sent from the browser
}
public class complexObjectRequest
{
    public string param1 { get; set; }
    public int param2 { get; set; }
    public List<Param3> param3 { get; set; }

    public complexObjectRequest()
    {

    }
}

public class Param3
{
    public string attr1 { get; set; }
    public string attr2 { get; set; }
    public string attr3 { get; set; }

    public Param3()
    {

    }
}