我不能通过尝试以下几种方式在lambda表达式中使用传递给我的javascript方法的参数。如何在下面的表达式中使用id参数?提前谢谢。
FileName中有一个超链接,我成功将ID参数传递给Javascript方法:
<a onclick="downloadFile(@p.ID);">@p.FileName</a>
function downloadFile(id) {
$.fancybox({
//This works: (p.ID == 82)
content: '<img src="data:image/png;base64,@System.Convert.ToBase64String(Model.FileAttachments.FirstOrDefault(p => p.ID == 82 ).FileData)" alt=""/>',
//They are not works: (p.ID == id / p.ID == @id / p.ID == this.id)
content: '<img src="data:image/png;base64,@System.Convert.ToBase64String(Model.FileAttachments.FirstOrDefault(p => p.ID == id ).FileData)" alt=""/>',
content: '<img src="data:image/png;base64,@System.Convert.ToBase64String(Model.FileAttachments.FirstOrDefault(p => p.ID == @id ).FileData)" alt=""/>',
content: '<img src="data:image/png;base64,@System.Convert.ToBase64String(Model.FileAttachments.FirstOrDefault(p => p.ID == this.id ).FileData)" alt=""/>',
type: "html"
});
}
更新:这是我之前使用的Ajax方法
function downloadFile(id) {
$.ajax({
url: "/Issue/RenderImage",
type: "POST",
data: JSON.stringify({ 'id': id }),
dataType: "json",
traditional: true,
contentType: "application/json; charset=utf-8",
success: function (response) {
$.fancybox({
content: '<img height="200" width="250" src="data:image/png;base64,' + response.Image + '" />',
type: "html"
//});
},
error: function () {
alert("an error has occured!!!");
}
});
}
答案 0 :(得分:1)
如果有人告诉你不需要ajax,似乎图像数据可以发布到页面,就像字典一样,你可以改变你的代码,并让你的Model.FileAttachments
成为js的一部分,就像
var allPictures= @JsonConvert.SerializeObject(Model.FileAttachments.ToDictionary(k=>k.ID,v=>System.Convert.ToBase64String(v.FileData)));
function downloadFile(id) {
$.fancybox({
content: '<img src="data:image/png;base64,'+allPictures[id] +'" alt=""/>',
type: "html"
});
}
你说要下载其他文件类型(pdf等),它不能像图像一样,你可以使用这些代码,如果没有限制下载文件
<a href="filePath">fileName</a>
答案 1 :(得分:0)
我通过修改@Sky Fang的答案来发布代码的最终工作状态,以便有人需要使用它。我还将title参数传递给javascript方法。
查看:强>
@using Newtonsoft.Json
<a onclick="showImage(@p.ID, '@p.FileName - @p.Created - @p.AuthorID');">@p.FileName</a>
<script>
function showImage(id, imageTitle) {
$.fancybox.showLoading(); //Shows loading animation
var allImages= @(new HtmlString(JsonConvert.SerializeObject(Model.FileAttachments.ToDictionary(k=>k.ID,v=>System.Convert.ToBase64String(v.FileData)))));
$.fancybox({
'scrolling' : 'no',
'titleShow' : true,
'title' : imageTitle,
'showCloseButton' : true,
'titlePosition' : 'outside',
//'titleFormat' : formatTitle,
//'transitionIn' : 'fade',
//'transitionOut' : 'fade',
//'speedIn' : 600,
//'speedOut' : 200,
'overlayShow' : false,
content: '<img style="height:500px; width:auto;" src="data:image/png;base64,'+ allImages[id] +'" />',
type: "html"
});
}
</script>