c# - Controller 是否有可能以干净的方式返回基于参数的图像?

标签 c# asp.net asp.net-mvc-3

我正在尝试在 ASP MVC3 中使用图表生成库 (ChartDirector)。

ChartDirector 正在根据相当大的数据结构生成条形图和 HTML 图像 map 。

我正在寻找一种方法:

  1. 直接使用图像,无需将其写入文件
  2. 使用生成的 HTML 图像映射

我可以生成一张图片并很好地显示它:

public ActionResult barChart() // ImageController
{
    // Code to make chart from hard-coded data
    var imageBytes = chart.makeChart2(Chart.PNG);
    var imageMap = chart.getHTMLImageMap();
    FileContentResult byteStream = new FileContentResult(image, "image/png");
    return byteStream;
}

然后直接在其中一个 View 中引用 Controller ,例如:

<img src="/Image/barChart"/>

问题是我找不到一个好的方法来获取必要的数据来构建 Controller 的条形图。

  • 我不能让 Controller 将图像数据添加到模型中,因为 HTML 要求图像链接自某个 URI——一个 Controller 。
  • 似乎没有一个 HTML 助手允许我将模型发送到 Controller
  • 我研究过制作一个 HTML 帮助器和一个 ImageResult 类型,但它没有解决图像映射的问题,而且我能找到的构建 URI 的唯一方法“BuildUrlFromExpression”似乎也没有存在于 MVC3 中。

我可以完成这一切的一种方法是将生成图表所需的模型放入 TempData,然后调用将使用 TempData 的 Controller ,并让 Controller 将 HTML 图像映射也放入 TempData,这将被读取由 View 。 这对我来说似乎非常丑陋。

我或许可以通过某种 session ID 存储数据,但这似乎并没有好多少。

我正在查看(以及其他):Can an ASP.NET MVC controller return an Image?但它不适用,因为该 Controller 正在读取一些预先生成的图像。

最佳答案

如果我理解你的问题,你只是在寻找一种方法来向 Controller 提供模型数据以用于生成图像?

img 标记中的 URL 应该能够像任何其他 URL 一样包含参数。也就是说,您应该能够:

<img src="/Home/ImageData/4?src=maps" />

它会调用这个方法:

class HomeController
{
    public ActionResult ImageData ( int id, string src )
    {
    }
}

在 View 中生成链接只需使用 UrlHelper.ActionLink 并提供正确的参数即可。

关于c# - Controller 是否有可能以干净的方式返回基于参数的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810001/

相关文章:

c# - CS1106 扩展方法必须在非泛型静态类中定义

c# - 如何从 C# 代码隐藏生成 sql 脚本文件?

asp.net-mvc-3 - 在客户端上缓存/查找 MVC 部分 View 的模式

c# - PagesIndex - 对象引用未设置为对象的实例

c# - 如果类型相同,Array.ToArray<>() 是否返回原始数组?

c# - 使用 TargetFramework 创建 Razor 类库到 .net core 3 会引发错误

c# - 将 .NET Framework 4.5 dll 添加到 .NET Core 项目

jquery - 单击 gridview 内的链接按钮时无法触发 jquery 警报

asp.net-mvc-3 - ASP.NET MVC3 UI 单元测试

c# - 方法属性在 C# 中是继承的吗?