下载带有 Knockout 绑定、ASP.NET MVC 堆栈且没有 Razor 的文件
Downloading a file with Knockout bindings, ASP.NET MVC stack and no Razor
正在尝试找到可以为我指明正确方向的资源,以下载具有此特定堆栈的文件。这比看起来更具挑战性,尤其是因为我无法按照内部规则使用 Razor。
代码执行可以从标记到敲除,然后是 C#,但它不会像我在普通 webforms 非 MVC 中期望的那样开始下载 ASP.NET。
加价:
<div class="row">
<div class="col-2"><img data-bind="attr: {src: image}, click: $root.downloadFile/></div>
knockout/javascript 调用:
self.downloadFile = function(e){
if(e) {
attachmentId = e.id;
helpers.ajax.getJson(root, "/Files/DownloadFile/", {fileId: attachmentId }, function(x){
attachmentId=0;
getFiles();
});
}
...
此处调用的相关 javascript 函数:
helpers.ajax.getJson = function(path, url, data, onSuccess, onError){
helpers.ajax.async('GET', path, url, {
data: data,
cache: false,
async: true,
error: onError,
success: onSuccess
});
};
function getFiles(){
self.files([]);
helpers.ajax.getJson(root, "/Files/GetFiles",
{ profileId: self.ProfileId() },
function (files) {
if(files) {
$.each(files, function (i, v) {
self.files().push(new file(v.AttachmentId, v.FileTypeDescr, v.FileExtension, v.FileName, v.UploadedBy, v.UploadDate, v.CompletionDate));
self.files.valuehasMutated();
});
}
});
}
C#
public FileResult DownloadFile(int fileId)
{
ODSAPI.AttachmentFile file = FileFunctions.GetById(fileId);
if(file != null)
{
return File(file.FileData, file.ContentType);
}
return null;
}
这是我单步执行代码并查看文件变量时 returns 正确的文件信息和数据库中的位。
您可以使用 http://danml.com/download.html 从 javascript AJAX return
下载文件
例如
download(data, 'Export.csv', 'application/csv');
其中数据将来自您的 ajax 请求以及文件名和文件类型 return。
Javascript 中的 JSON 调用不正确,因为它调用了 JSON 对象。相反,它应该是:
window.open(root + "/Files/DownloadFile?fileId=" + attId, '_blank');
而不是helpers.ajax.getJson()
正在尝试找到可以为我指明正确方向的资源,以下载具有此特定堆栈的文件。这比看起来更具挑战性,尤其是因为我无法按照内部规则使用 Razor。
代码执行可以从标记到敲除,然后是 C#,但它不会像我在普通 webforms 非 MVC 中期望的那样开始下载 ASP.NET。
加价:
<div class="row">
<div class="col-2"><img data-bind="attr: {src: image}, click: $root.downloadFile/></div>
knockout/javascript 调用:
self.downloadFile = function(e){
if(e) {
attachmentId = e.id;
helpers.ajax.getJson(root, "/Files/DownloadFile/", {fileId: attachmentId }, function(x){
attachmentId=0;
getFiles();
});
}
... 此处调用的相关 javascript 函数:
helpers.ajax.getJson = function(path, url, data, onSuccess, onError){
helpers.ajax.async('GET', path, url, {
data: data,
cache: false,
async: true,
error: onError,
success: onSuccess
});
};
function getFiles(){
self.files([]);
helpers.ajax.getJson(root, "/Files/GetFiles",
{ profileId: self.ProfileId() },
function (files) {
if(files) {
$.each(files, function (i, v) {
self.files().push(new file(v.AttachmentId, v.FileTypeDescr, v.FileExtension, v.FileName, v.UploadedBy, v.UploadDate, v.CompletionDate));
self.files.valuehasMutated();
});
}
});
}
C#
public FileResult DownloadFile(int fileId)
{
ODSAPI.AttachmentFile file = FileFunctions.GetById(fileId);
if(file != null)
{
return File(file.FileData, file.ContentType);
}
return null;
}
这是我单步执行代码并查看文件变量时 returns 正确的文件信息和数据库中的位。
您可以使用 http://danml.com/download.html 从 javascript AJAX return
下载文件例如
download(data, 'Export.csv', 'application/csv');
其中数据将来自您的 ajax 请求以及文件名和文件类型 return。
Javascript 中的 JSON 调用不正确,因为它调用了 JSON 对象。相反,它应该是:
window.open(root + "/Files/DownloadFile?fileId=" + attId, '_blank');
而不是helpers.ajax.getJson()