如何将一个ObservableArray传递给MVC控制器? 没有Ajax

我有一个可观察的数组与视图模型数据的列表,我需要传递给正常的控制器有一个返回types的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 downloded与新窗口打开。

我需要build议如何通过observableArray像我正在处理的方式。

我也厌倦了这样的事情:

 var URL = "/DownloadExcel/Index?data="+ko.toJson(self.qualities()); //this dont to controller itself 

我尝试使用Ajax调用仍然有效的一种方法即ie我可以通过ObservableArray但ActionResult返回types它无法处理。 总是去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(); } 

使用string参数

 [HttpPost] public ActionResult Index(string data) //break point at controller not even hitting { return View(); } 

任何帮助是非常感激的。

您需要对值进行编码:

 var URL = "/DownloadExcel/Index?data=" + encodeURIComponent(ko.toJson(self.qualities())); 

如果qualities包含查询string的数据太多,则可以使用post。 例如:

 <form method="post" action="/DownloadExcel/Index"> <input type="hidden" name="data" data-bind="value: qualities" /> <button>Download</button> </form> 

在规范中GET请求比POST有更小的限制。

最初GET的目的是小而简单,而POST则是用有朝一日可以用于file upload等的愿景创build的。 POST所面临的限制不是来自规范,而是服务器configuration,技术上可以没有限制。

除此之外,浏览器还需要努力减less长URL以避免过去的缓冲区溢出攻击,特制的URL可以在客户端机器上执行任意代码。

所以你的解决scheme更可能是一个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']));