2012-08-02 1 views
0

Lorsqu'une ligne du tableau HTML est cliquée, l'appel ajax est envoyé au contrôleur MVC3 qui renvoie un objet json avec un tableau d'octets de l'image, mais l'image vide être affiché dans la vue. Cela devrait fonctionner à partir d'IE 7 à 9Affichage de l'image renvoyée en tant que tableau d'octets du contrôleur MVC via l'appel Ajax

Le code du contrôleur est:

[HttpPost] 
    public ActionResult RenderImage(string code) 
    { 
     ImageVM viewmodel = GetImage(code) 
     return Json(viewmodel.Chart, "image/png"); 
    } 

Le code javascript pour soulever l'appel ajax et afficher l'image est

$(document).ready(function() { 
     $('#Table tr').click(function (event) { 
     var id= $(this).attr('id') 
     $.post("/Gateway/RenderImage", { "code": id }, 
    function (data) { 
       alert(data); 
      $('#ChartDiv').html('<img height="200" width="250" src="data:image/png;base64,' + data + '" />'); 

      }); 
     }); 
    }); 

Répondre

1

J'ai changé votre code un peu et cela fonctionne avec moi :)

[HttpPost] 
     public virtual JsonResult RenderImage(string code) 
     { 
//for test data Im using the below, you can use yours : GetImage(code)   
var data = 
    @"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC"; 
      return Json(data); 
     } 

et dans le Javascript (retiré une barre oblique inverse)

$('#Table tr').click(function (event) { 
     var id = $(this).attr('id') 
     $.post("Gateway/RenderImage", { "code": id }, 
    function (data) { 
     alert(data); 
     $('#ChartDiv').html('<img height="200" width="250" src="data:image/png;base64,' + data + '" />'); 

    }); 
    }); 

[Modifier] pour faire fonctionner le code ci-dessus avec un fichier .png, nous pouvons changer l'action du contrôleur au-dessous:

[HttpPost] 
public virtual JsonResult RenderImage(string code) 
{ 
    var filePath = "~/Images/PngExampleImag.png"; 
    var ImageBytes = System.IO.File.ReadAllBytes(Server.MapPath(filePath)); 
    var data = Convert.ToBase64String(ImageBytes); 
    return Json(data); 
} 
+0

I essayé de retourner tableau png byte en utilisant ce code de l'action RenderImage "return Json (System.IO.File.ReadAllBytes (errorFilePath))" et encore il n'est pas en mesure d'afficher l'image dans la vue – user1570697

+0

@ user1570697 J'ai modifié la réponse et ajouté une petite modification à l'action pour le rendre le fil de l'image png e, je l'ai testé et son fonctionnement avec mon application. J'espère que cela t'aides. –

+0

J'ai essayé le code du contrôleur avec un exemple d'image var filePath = "~/Images/Error.png"; var ImageBytes = Fichier System.IO.File.ReadAllBytes (Server.MapPath (filePath)); var base64data = Convert.ToBase64String (ImageBytes); return Json (base64data); l'image n'est toujours pas mise à jour, bien que les données arrivent à l'appel ajax, peut-être que cela ne fonctionne pas correctement $ ('# ChartDiv'). html (''); J'utilise IE 9 – user1570697

Questions connexes