Javascript 从表单POST接收的对象为空
我试图调用URL将对象转换为excel文件以供客户端下载,因此我使用以下HTML: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
<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()
{
}
}