问题
I have look at many web sites and many pages on Stackoverflow, but none of them has solved my problem yet. Simply, I have a hyperlink
and I want to retrieve an image from database via Ajax
call and then display it on FancyBox
popup. I also tried many different combinations of Javascript
and Controller
action methods, but have not managed so display the downloaded file properly. Could you please have a look at my code and give a working example containing all the necessary methods in View
and in Controller
? On the other hand, it would be better to open a dialog for the other file types (i.e. excel, pdf) while opening FancyBox
for image files.
View:
<a onclick="downloadFile(@Model.ID);">@Model.FileName</a>
function downloadFile(id) {
$.ajax({
url: "/Issue/RenderImage?ID=" + id,
async: true,
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (response) {
$('#fancybox-inner').html('<img height="200" width="250" src="data:image/png;base64,' + response + '" />');
}
});
}
Controller: There is no problem regarding to the method in the Controller and it returns the image properly.
[HttpPost]
public virtual JsonResult RenderImage(int id)
{
string str = System.Convert.ToBase64String(repository.FileAttachments.FirstOrDefault(p => p.ID == id).FileData, 0, repository.FileAttachments.FirstOrDefault(p => p.ID == id).FileData.Length);
return Json(new { Image = str, JsonRequestBehavior.AllowGet });
}
回答1:
Better try
success: function (response) {
$.fancybox({
content: '<img height="200" width="250" src="data:image/png;base64,' + response + '" />',
type: "html"
});
}
I wonder why you trying to load the content inside a fancybox container when you don't show any code where you already opened it. Anyways, it's always better to launch a new fancybox with the new content (from ajax response)
Of course, this will work if the ajax call is returning the correct response for your <img>
tag, but that I cannot tell.
回答2:
This should work. Looks like image is stored as JSON. If so, I think you should convert it back to Base64 before sending it to the browser. See http://mobile.cs.fsu.edu/converting-images-to-json-objects/
function downloadFile(id) {
$('#fancybox-inner').html('<img height="200" width="250" src="/Issue/RenderImage?ID='+id+'" />');
}
来源:https://stackoverflow.com/questions/31351626/jquery-fancybox-with-ajax