我的应用程序是在 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/