ASP.NET MVC后控制器获取json,生成文件并返回它
本文关键字:文件 返回 json MVC NET 控制器 获取 ASP | 更新日期: 2023-09-27 18:36:04
我有一个 ajax 发布请求:
function downloadElevationMap() {
var jsonData = ko.toJSON(mod.SelectedItem);
$.ajax({
url: '/Home/GetData/',
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: jsonData,
success: function (data) {
console.log("OK");
},
});
}
控制器方法接收的数据正确。代码如下所示:
public FileStreamResult GetData(Mv jsonData)
{
var resultAll = jsonData.Data.Select(d => d.y).ToList();
var str = new StringBuilder();
_fileName = "ses"+jsonData.Path;
foreach (var d in resultAll)
{
str.Append(d + " ");
}
var byteArray = Encoding.ASCII.GetBytes(str.ToString());
var stream = new MemoryStream(byteArray);
return File(stream, "text/plain", string.Format("{0}.txt", _fileName));
}
Mv - 是我表示数据的类。调试时,str
和流variable
都包含正确的数据。
函数downloadElevationMap()
由onclick="downloadElevationMap()"
调用
我只希望当downloadElevationMap()
被称为GetData
控制器时返回一个文件以供下载。但根本什么也没发生。错误在哪里?
好吧,
你不需要ajax来尝试这个
window.location="download.action?para1=value1...."
根据您的需求,您可以做这样的事情
window.location="/Home/GetData/?"+$.param(jsonData )
我相当确定您正在做的是在 AJAX 调用中吞下成功回调中的数据 - 您的代码所做的只是下载文件,调用success
回调,然后只需将"确定"打印到控制台。
正如Anto所说,你不需要AJAX(实际上,不应该使用AJAX)。他的回答是绝对正确的,只要你可以使用 GET 字符串。如果您需要使用 POST 请求,请创建一个包含隐藏输入的表单并提交 - 如下所示:
.HTML
<form action="/Home/GetData" method="POST" id="dataToSubmit">
<input type="hidden" name="param1" value="value1" />
<input type="hidden" name="param2" value="value2" />
<input type="hidden" name="param3.param4" value="value3" />
</form>
.JS
function downloadElevationMap() {
// Write code to map your jsonData to your form elements
$('#dataToSubmit').submit();
}
如果您愿意,您可以动态制作表单。您或许可以通过提交按钮更新页面以直接发布。
最后一点,您不需要将数据作为 JSON 提交。如果你有
{
"param1": "value1",
"param2": "value2",
"param3": {
"param4": "value3"
}
}
然后,如果您只使用上面表单中的格式,它将提交良好 - 此参考解释了如何提交到深度模型。