2017-02-03 22 views
0

C#MVCでは、ユーザー(ブラウザ、PDFドキュメント、Excelなど)に異なるレンダリングが必要ないくつかのステップが含まれています。 私は現在、テーブル、チャート、またはその両方を表示するビューのモデルとして機能するコレクションを含む複雑なクラスを持っています。c#MVCで@ url.actionの複雑なオブジェクトをRouteValueDictionaryと併用する

私はurl.action引数に

SRC = "@のUrl.Action(" SampleChartを」オブジェクトを渡すためにRouteValueDictionaryを定義しているチャート の画像を取得するためにurl.action @使用し、 "Statistique"、Model.RouteValues)) "

コントローラ内:ブール値と文字列は塗りつぶされますが、辞書は含まれません(resultatsStatistique)。私の問題を解決するための考えはありますか?以下は

以下のモデル

public class StatisticDTO 
{ 
    public virtual string Stat_Title { get; set; } 
    public bool DisplayChart { get; set; } 
    public bool DisplayTable { get; set; } 
    public Dictionary<string, RowStat> resultatsStatistique; 
    public RouteValueDictionary RouteValues 
    { 
     get 
     { 
      var rvd = new RouteValueDictionary(); 
      rvd["DisplayChart"] = DisplayChart; 
      rvd["DisplayTable"] = DisplayTable; 
      rvd["resultatsStatistique"] = resultatsStatistique; 
      return rvd; 
     } 
    } 
} 
public class RowStat 
{ 
    public virtual string prest_libe { get; set; } 
    public virtual decimal prest_effec { get; set; } 
    public virtual int prest_order { get; set; } 
    public virtual string prest_sex { get; set; } 
} 

の簡易版である私の見解を簡略化した以下

@model StatisticDTO 

<div> 
    @if (Model.DisplayChart) 
    { 
     <div> 
      <img src="@Url.Action("SampleChart", "Statistique", Model.RouteValues))" /> 
     </div> 
    } 


    @if (Model.DisplayTable) 
    { 
     @Html.Partial("_Tableau", Model) 
    } 

</div> 

あるコントローラ

public ActionResult SampleChart(StatisticDTO modelIN) 
       { 
(.....) 
MemoryStream ms = new MemoryStream(); 
      chart.SaveImage(ms, ChartImageFormat.Png); 
      return File(ms.ToArray(), "image/png"); 
} 
+0

画像のURLとしてブラウザに表示される内容を確認すると便利です。 – MikeS

+0

コントローラのビューを取得する場所はどこですか? –

+0

は '@ Url.Action(" SampleChart "、" Statistique "、新しい{modelIN = Model})'を使用します。 – JamieD77

答えて

0

オーケーの簡易版であります。コメントしてくれてありがとう。 簡単な解決法はないかもしれません。 私はイメージソースを取得するための別の解決策を探しました。ここでは話題にはなりませんが、関心のある人にとっては、2つのアクションの間に往復をするという解決策はありません。あなたは最初のアクションでファイルを生成し、最初のアクション

ms = new MemoryStream(); 
Chart.SaveImage(ms, ChartImageFormat.Png); 
modelOUT.ByteArray = ms.ToArray(); 

にバイト配列としてモデルにこのよう

それを渡すために持っていると、このビューで

@{ 
    var base64 = Convert.ToBase64String(Model.ByteArray); 
    var imgSrc = String.Format("data:image/gif;base64,{0}", base64); 
} 

<img src="@imgSrc" /> 

MVC How to display a byte array image from model

関連する問題