我目前正在试图查看存储在数据库中为BLOB的图像,要做到这一点,我创建的类型FileContentResult它看起来像这样的控制器操作:ASP.NET MVC 4 FileContentResult运行两次
public FileContentResult ImageFile(string imageId)
{
var client = new WcfTestClient();
DataTable table = client.GetImageData(imageId);
var image = ConvertToBytes(table);
byte[] bytes;
bytes = image[0].Values.ElementAt(0);
return File(bytes, @"image/png");
}
它从数据库中获取正确的图像数据,并且ConvertToBytes()也能正常工作,但由于某种原因,将图像返回到视图后,它会跳回顶部并再次运行。
我使用Ajax调用从我的浏览这样的方法:
$.ajax({
url: "/Home/ImageFile",
type: "GET",
data: { "imageId": imageId },
success: function (data) {
var image = document.createElement('img');
image.src = "/Home/ImageFile?id=" + imageId;
image.width = 100;
image.height = 100;
div.appendChild(image);
}
});
有谁知道什么可能导致我的问题?
更新
好了,现在后被告知,这是阿贾克斯的是把事情搞糟我试图参数发送到我的控制器操作是这样的:
var images = JSON.parse(window.localStorage.getItem("JsonImages"));
var div = document.getElementById('imgOutput');
for (var i = 0; i < images.length; i++) {
var imageId = images[i].pi_Id;
var imgId = JSON.parse('{"imageId":' + imageId + '}');
var img = document.createElement('img');
img.src = "/Home/ImageFile?id=" + imgId;
img.width = 100;
img.height = 100;
div.appendChild(img);
}
其中,可悲的是,不太好。那么,有没有办法将参数发送到ImageFile()而不使其运行两次?我在这里错过了什么?
更新2
最后我得到它的工作!这是它现在的样子:
var images = JSON.parse(window.localStorage.getItem("JsonImages"));
var div = document.getElementById('imgOutput');
var createImage = function (src) {
var img = document.createElement('img');
img.src = src;
img.height = 100;
img.width = 100;
return img;
}
for (var i = 0; i < images.length; i++) {
var imageId = images[i].pi_Id;
var imageSrc = "/Home/ImageFile?imageId=" + imageId;
div.appendChild(createImage(imageSrc));
}
我只需要将源的参数从id更改为imageId(duh)。谢谢你的帮助!
什么触发ajax调用? – 2013-05-03 07:06:19