【问题标题】:c# MVC using complex object in @url.action with RouteValueDictionaryc#MVC在@url.action中使用复杂对象和RouteValueDictionary
【发布时间】:2017-06-20 23:26:40
【问题描述】:

我必须在 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");
}

【问题讨论】:

  • 查看呈现给浏览器的内容作为图像的 url 会很有帮助。
  • 控制器中视图的Get在哪里?
  • 不能使用@Url.Action("SampleChart", "Statistique", new { modelIN = Model })
  • 没有modelIN为空
  • 你不能。 Url.Action() 方法(以及构建RouteValueDictionary 的所有方法)使用属性名称的.ToString() 来生成查询字符串。它不对复杂属性使用递归。

标签: c# asp.net-mvc asp.net-mvc-4 url.action


【解决方案1】:

好的。谢谢你的cmets。 可能没有简单的解决方案。 所以我寻找另一种解决方案来获取我的图像源。这里没有话题,但对于那些感兴趣的人来说,解决方案不是在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多