我是新来使用ASP.NET MVC 4与Web Api.
我想允许用户下载一个文件,这个文件我将在服务器端创建.为了创建文件,我已经设法掌握了以下代码
[ActionName("Export")] public HttpResponseMessage PostExportData(SomeModel model) { string csv = _service.GetData(model); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StringContent(csv); //a text file is actually an octet-stream (pdf,etc) result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); //we used attachment to force download result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = "file.csv"; return result; }
如何使用JQUERY来呼叫这个WEB API方法?
但是我不知道如何使用jquery调用这个web api,并让它给我一个文件,在你下载任何文件时你通常会得到一个“保存为/打开”选项.
有人可以帮我,指导我如何打电话并下载文件.谢谢.
解决方法
您可以在要使用jquery的视图中执行此操作.我假设控制器的名称是ExportController.您还必须分解模型变量,或者在HttpResponseMessage PostExportData(SomeModel模型)中收集模型,
通过其他方式.
通过其他方式.
HTML:
<a class="export">export</a>
JavaScript的:
<script> $('a.export').click(function(e) { e.preventDefault(); //stop the browser from following window.location.href = '@Url.Action('Export','ExportController',new { property = model.property,property = model.property2 })'; }); </script>
使用POST
function UpdateForm(modelObject) { if ($('#hidden-form').length < 1) { $('<form>').attr({ method: 'POST',id: 'hidden-form',action: '@Url.Action('Export','Export')' }).appendTo('body'); } $('#hidden-form').html(''); for(var propertyName in modelObject) { $('<input>').attr({ type: 'hidden',id: propertyName,name: propertyName,value: modelObject[propertyName] }).appendTo('#hidden-form'); } } $('a.export').click(function(e) { e.preventDefault(); var modelObject = { property1 : "property1" }; UpdateForm(modelObject); $('#hidden-form').submit(); });
然后你可以通过js发布#隐藏表单,这将触发文件下载