名称 'id' 在 Javascript 方法的当前上下文中不存在
The name 'id' does not exist in the current context in Javascript method
通过尝试以下几种方法,我无法在 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!!!");
}
});
}
如果有人告诉你不需要ajax,好像图像数据可以post分页,就像字典一样,你可以改变你的代码,把你的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>
我通过修改@Sky Fang的答案贴出代码的最终工作状态,以便有人需要使用它。我还将标题参数传递给 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>
通过尝试以下几种方法,我无法在 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!!!");
}
});
}
如果有人告诉你不需要ajax,好像图像数据可以post分页,就像字典一样,你可以改变你的代码,把你的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>
我通过修改@Sky Fang的答案贴出代码的最终工作状态,以便有人需要使用它。我还将标题参数传递给 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>