我有一个带有视图模型数据列表的可观察数组,我需要传递给Normal控制器,它的返回类型为ActionResult
public ActionResult Index(list<qualities> data)
{
return excelCon.DownloadTMExcel(data); //here i get actionResult as ReturnType
}
Java脚本代码:
var URL = "/DownloadExcel/Index?data="+self.qualities(); //self.qualities holds my entire list which hits break point in controller but i get Zero list .
window.open(URL, "_blank");
实际上,令人兴奋的情况是当一切正常时我会在新窗口打开的情况下下载excelsheet。
我需要有关如何传递observableArray的建议,就像我正在处理的那样。
我也厌倦了:
var URL = "/DownloadExcel/Index?data="+ko.toJson(self.qualities()); //this dont to controller itself
我尝试使用Ajax调用仍然以一种方式工作,即我可以传递ObservableArray但ActionResult返回它无法处理的类型。总是它转到ajax调用的错误功能,我不会下载我的Excel。
唯一的案例对我有用:还有其他场景我只需要将参数传递给控制器然后我就可以打开一个新窗口并下载相关的Excel。
var URL = "/DownloadExcel/Index?typeId="+2;
window.open(URL, "_blank"); //on open of new window i get excel downloaded
另外:
[HttpPost]
public ActionResult Index(list<qualities> data) // i get count ZERO
{
return View();
}
使用字符串参数
[HttpPost]
public ActionResult Index(string data) //break point at controller not even hitting
{
return View();
}
非常感谢任何帮助。
答案 0 :(得分:1)
您需要对值进行编码:
var URL = "/DownloadExcel/Index?data=" +
encodeURIComponent(ko.toJson(self.qualities()));
如果qualities
包含的查询字符串数据太多,您可以使用帖子。例如:
<form method="post" action="/DownloadExcel/Index">
<input type="hidden" name="data" data-bind="value: qualities" />
<button>Download</button>
</form>
答案 1 :(得分:1)
GET请求的限制比规范中的POST小。
最初GET旨在小而简单,而POST的创建目标是有一天它可以用于文件上传等。您对POST所面临的限制不是来自规范,而是服务器配置,从技术上讲,它可以没有限制。
除了对GET的限制之外,浏览器还需要花费大量精力来减少长URL,以避免过去的缓冲区溢出漏洞,特制URL可以在客户端计算机上执行任意代码。
因此,您的解决方案更可能是POST请求。除了AJAX之外,这样做的一种方法是将数据保存到隐藏字段中:
<input type="hidden" id="json_to_send" name="json_to_send" />
document.getElementById('json_to_send').value = JSON.stringify(myobjectarray);
然后在服务器端的PHP中:
$myobjectarray = json_decode(html_entity_decode($_POST['json_to_send']));