在后端使用MVC3 .net控制器,我正在执行HttpPost通过HttpContext提交文件。
当服务器读取文件时,将返回带有上载结果的字符串列表。
到目前为止,我已经能够实现两种方案:
1)将字符串列表作为单个制表符分隔的字符串返回为JsonResult
string tabSeparatedMessages = "";
foreach (string message in messageLog)
{
tabSeparatedMessages = tabSeparatedMessages + message;
if (message != messageLog[messageLog.Count - 1])
{
tabSeparatedMessages = tabSeparatedMessages + '\n';
}
}
return this.Json(new
{
success = true,
total = messageLog.Count,
data = tabSeparatedMessages
}, "text/html", JsonRequestBehavior.AllowGet);
2)将文本文件中的字符串列表作为ActionResult
返回string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".txt";
using (StreamWriter writer = new StreamWriter(fileName))
{
foreach (string message in messageLog)
{
writer.WriteLine(message);
}
}
return File(fileName, "text/plain", "UPLOAD_RESULTS.txt");
我的问题是我需要来自这些方法的元素,但很难将两者结合起来。我想要JsonResult,以便我可以返回一个布尔“成功”值来释放客户端上的模态等待消息。我想要ActionResult,以便客户端可以简单地下载文件,而不是将字符串列表解析为GUI组件。
有没有办法返回要作为JsonResult的一部分下载的文本文件或使用ActionResult返回Json数据?
感谢您阅读
答案 0 :(得分:2)
不幸的是,您一次只能返回一种结果类型。如果我是你,我真的需要将upload_results.txt下载到客户端,我的json结果中会有一个参数,它是对服务器上文件的引用。
因此客户端首先得到上传成功的响应,然后隐藏模态对话框,然后使用javascript再次发出upload_results.txt文件请求。
答案 1 :(得分:0)
我同意上述内容,发送JSON并将文件临时存储在网络服务器上。在JSON中获得此文件的路径,然后只需执行GET