c# - Json 未正确绑定(bind)为 c# 对象

标签 c# asp.net ajax

我的应用程序是在 ASP.NET MVC 5 中制作的。用户可以使用显示过滤数据的搜索表单。现在我想添加导出显示数据的按钮。

为此,我发送了 Search 对象以在 html 中查看和保存它。现在,当单击导出按钮时,我想将此对象传递给 Controller ​​,使用此 Search 对象从数据库中获取数据并将结果保存为 text

问题是我无法将 json 绑定(bind)到 c# 对象。那是我的 View :

<div id="originalForm" style="visibility:hidden">
    @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))
</div>

这是我的 ajax 代码:

function exportRaportToCsv() {
    var $formData = $('#originalForm').text();
    var allIds = getCheckedIds();

    var dataToSend = JSON.stringify({
        ids: allIds,
        search: $formData
    });


    $.ajax({
        type: "POST",
        url: '@Url.Action("ExportToCsv", "BankCosts")',
        data: dataToSend,
        contentType: "application/json; charset=utf-8",
        success: function (datar) {
            window.location = '/BankCosts/Download?fileGuid=' + response.FileGuid
                + '&filename=' + response.FileName;
        },
        error: function (xhr) {
        },
    });
}

这是我的 Controller :

[HttpPost]
public ActionResult ExportToCsv(string[] ids, Search search)
{
    // search is null here
}

当我用 Fiddler 发送数据时,我可以看到,我正在传递这个:

{"ids":[],"search":"\n    {\"ID\":0,\"DateFrom\":\"2018-06-23T00:00:00\",\"DateTo\":\"2018-06-25T00:00:00\",\"hasUnrecognizedStatus\":false,\"skippedSearchResults\":0,\"paginationLimit\":100}\n"}

我认为值得一提的是,ids 已正确传递。如果它包含数据,则传递该数据。我认为问题是我的 json 中有 \。我怎样才能删除它?我的 ajax 有问题吗?

当我使用 console.log 打印 $formData 时,我可以看到 \ 字符消失了,看起来好多了:

{"ID":0,"DateFrom":"2018-06-23T00:00:00","DateTo":"2018-06-25T00:00:00","hasUnrecognizedStatus":false,"skippedSearchResults":0,"paginationLimit":100}

最佳答案

[HttpPost]
public ActionResult ExportToCsv(string[] ids,[FromBody]Search search)
{
}

如果您的搜索模型没问题,请尝试添加 FromBody。

关于c# - Json 未正确绑定(bind)为 c# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51017597/

相关文章:

jquery - 使用 DataTables Ajax 将数据发布到 php Controller

c# - 如何在 MVVMCross 中注册泛型类型

asp.net - 无法加载文件或程序集 kre-clr-win - 如何指定 KRE?

c# - 如何为组合框获取我的数据源一次?

javascript - 如何使用 Jquery .load() 重新加载部分 View ?

jquery - 使用 jQuery 验证插件显示摘要和单独的错误消息

javascript - 将 FormData 从 Trigger.io Forge 上传到 Amazon S3

C# 字符串连接最佳实践

c# - 在 Unity 中的最小和最大 X、Y 和 Z 坐标之间移动相机

c# - 如何删除所有成员属性但保留空行?