[英]c# MVC using complex object in @url.action with RouteValueDictionary
我必须在C#MVC中创建一个统计项目,该项目包含几个步骤,需要为用户提供不同的呈现方式(浏览器,PDF文档,Excel等)。对于浏览器部分,我目前有一个复杂的类,其中包含一个用作模型的集合用于显示表格,图表或两者的视图。
我使用@ url.action来获取图表的图像,我已经定义了RouteValueDictionary以在url.action参数中传递对象
src =“ @ Url.Action(” SampleChart“,” 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");
}
好的。 感谢您的意见。 可能没有简单的解决方案。 因此,我正在寻找另一种解决方案来获取图像源。 这里不是主题,但是对于感兴趣的人,解决方案不是在两个动作之间进行往返。 您必须在第一个操作中生成一个文件,并将其作为字节数组传递给模型
像这样的第一步
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" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.