2017-02-03 1 views
0

Je dois faire un projet statistique en C# MVC qui contient plusieurs étapes nécessitant différents rendus pour l'utilisateur (navigateur, document PDF, Excel, ...) Pour partie du navigateur, j'ai actuellement une classe complexe contenant une collection qui sert de modèle pour une vue qui affiche soit une table, un graphique ou les deux.C# MVC utilisant un objet complexe dans @ url.action avec RouteValueDictionary

J'utilise @ url.action pour obtenir une image de la carte j'ai défini un RouteValueDictionary pour passer l'objet dans les arguments de url.action

src = "@ Url.Action (" SampleChart », "Statistique", Model.RouteValues)) "

Dans le contrôleur: boolean et string sont remplis mais pas le dictionnaire (resultatsStatistique). Avez-vous une idée pour résoudre mon problème?

Ci-dessous est une version simplifiée du modèle

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; } 
} 

Ci-dessous est une version simplifiée de mon avis

@model StatisticDTO 

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


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

</div> 

Ci-dessous est une version simplifiée du contrôleur

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

Il serait utile de voir ce qui est rendu au navigateur comme l'URL de l'image. – MikeS

+0

où est le Get de la vue dans le contrôleur? –

+0

ne peut pas utiliser '@ Url.Action (" SampleChart "," Statistique ", new {modelIN = Model})'? – JamieD77

Répondre

0

Ok . Merci pour vos commentaires. Peut être qu'il n'y a pas de solution simple. J'ai donc cherché une autre solution pour obtenir ma source d'image. C'est hors sujet ici, mais pour ceux qui sont intéressés, la solution n'est pas de faire un aller-retour entre 2 actions. Vous devez générer un fichier dans la première action et le transmettre au modèle comme un tableau d'octets

Comme cela dans la première action

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

et cette perspective

@{ 
    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