javascript - 从表单 POST 中接收到的对象为 null

标签 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="complexObject" type="hidden" name="complexObject" value="" />
</form>

以及以下 JavaScript:

var req = {
param1: "Example",
param2: 1,
param3: [ { attr1: "test", attr2: 1, attr3: "Hello" },
    { attr1: "test", attr2: 1, attr3: "Hello" },
    { attr1: "test", attr2: 1, attr3: "Hello" }  ]
};

$("#downloadToken").val("nhwe1-jdw3e-djdw2-mkcds");
$("#complexObject").val(JSON.stringify(req));
$("#newQueryForm").submit();  

最后,以下 Controller .cs:

public ActionResult DownloadFile(string token, wcfGlobal.complexObjectRequest complexObject)
{ 
    ...
}

我遇到的问题是 token 接收得很好(它只是一个简单的字符串);然而,complexObject 被接收为 null。

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

最佳答案

您在发送req对象之前对其进行序列化,因此它作为字符串发送。没有办法自动反序列化complexObject

在我看来,您可以继续将复杂对象作为字符串发送并在 Controller 中反序列化

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>

C#

// 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
}

根据您发布的 JavaScript,complexObjectRequest 类需要这样声明

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()
    {

    }
}

关于javascript - 从表单 POST 中接收到的对象为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058437/

相关文章:

javascript - 测试模块的未导出 Node 方法

javascript - angular2 中 angular.isString() 的替代方法是什么?

css - 清除每行中的最后一个 float 元素

asp.net - 控件样式被覆盖

asp.net - 如何在 Asp.Net MVC 3 中对使用带有子实体的数据模型的类进行单元测试

javascript 原型(prototype)和内存

c# - 来自 asp.net C# 页面的外部 javascript 文件

html - 使用 CSS 和 HTML 设计 map 样式

javascript - 将 jQuery datepicker 分配给 div 元素并获取值

javascript - 在 MVC 中注销后 MVC 浏览器后退按钮问题