2017-05-17 11 views
0

私は基本イメージを持っており、C#Graphicsライブラリを使ってデータを追加し、イメージをバイト配列に変換して返します。Ajaxを使用してASP.NET MVC Controllerでファイルとして返されたイメージを更新するには?

私が持っているコントローラ:

public ActionResult DisplayDR(int drNum) 
    { 
     ER dr = DataUtility.getDR(drNum, errors); 
     return File(DrawDRUtility.getDRimageAsByteArray(dr), "image/png"); 
    } 

と正常に動作し、

<img id="drImage" src="@Url.Action("DisplayDR")" width="1110" height="484" alt="qr code" /> 

を私は動的に画像を更新し、運でアヤックスと試みたことができるようにする必要があります。

使用: 関数getNewDRImage(インスタンス){

var drNum = $(instance).data('val'); 
    var src = '@Url.Action("DisplayDR", "Home", new { area = "Part" })'; 
    $.ajax({ 
     type: "GET", 
     url: src, 
     data: { drNum : drNum }, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     error: function (err) { 
      var msg = "Client side error, " + err; 
      throwClientSideErrorMsg(msg) 
     }, 
     success: function (data) { 
     $('#drImage').attr("src", data.image); 
     } 
    }); 

}

などのようなJSONを返すを

public JsonResult DisplayDMR(int drNum) 
    { 
     ER dr = DataUtility.getDR(drNum, errors); 
     return 
      Json(new { image = File(DrawDRUtility.getDRimageAsByteArray(dr), "image/png") }, JsonRequestBehavior.AllowGet); 
    } 

は私に、このエラーを与える:

System.Web.HttpException (0x80004005): The controller for path '/[object Object]' was not found or does not implement IController.

私は正しくしませんか?

<img id="dmrImage" src="[object Object]" alt="qr code" height="484" width="1110"> 

だから私は、私はJSONデータをどうするかで混乱しています推測:これは、応答が何であるかであるとして、エラーが発生した理由を私は見AJAX呼び出しの後にソースを表示

更新、イメージを更新します。

答えて

1

あなたの画像の実際のバイト数を読み込んで、src属性に割り当てようとしています。それは属性が期待するものではありません。

新しい画像URLを文字列として割り当てるだけです。ブラウザは自動的に実際のバイトを取得し、新しいイメージを表示します。

更新されたイメージに同じURLを使用する場合は、ブラウザが古いキャッシュイメージを使用しないようにする必要があります。これを行う方法はanswerをご覧ください。 Response.AddHeader()メソッドを使用あなたのFile()応答にCache-Control:ヘッダを追加するには

public ActionResult DisplayDR(int drNum) 
{ 
    Response.AddHeader("Cache-Control", "no-store"); 
    ER dr = DataUtility.getDR(drNum, errors); 
    return File(DrawDRUtility.getDRimageAsByteArray(dr), "image/png"); 
} 
+0

は、応答をありがとうございました。残念ながら私はまだ混乱しています。だから、私は "物"をするために別の関数を呼び出すために私のajaxを変更し、その後に戻ります。成功したリターンでは、 を呼び出します。var src = '@ Url.Action( "DisplayDR"、 "Home"、new {area = "Part"})' + "?drNum =" + drNum;$( '#drImage')。attr( "src"、src);そして、DisplayDrメソッドは決して呼び出されません。私がやっていることのほんの一例をあなたに教えてもらえますか?私はajaxを呼び出す必要がありますが、Ajaxから返された画像を更新できることを期待しています。ありがとうございました。 – eaglei22

+0

上記のようにCache-ControlをDisplayDrメソッドに追加しました。 – eaglei22

+0

気にしないでください。私は、クエリー文字列の前後に '='の前後にスペースを追加していたため、より詳細な情報が明らかになりました。 var src = '@ Url.Action( "DisplayDR"、 "Home"、new {area = "Part"})' + "?drNum =" + drNumはトリックを行いました。 もう一度おねがいします! – eaglei22

関連する問題