我使用ASP.Net与MVC 3并尝试自动生成图像。在我看来,我可能会从1到50个图像(最终可能更多)产生任何东西,这些图像目前只有一个镜头可以丢弃图像。这是因为它们显示了我的数据的当前结果,这些数据得到相当频繁的更新,所以生成的图像不能长期依赖。在ASP.NET MVC中自动生成图像3
当前我在飞行中绘制结果。用户可以选择要查看哪些结果,然后如何获得结果,将图形写入文件,然后选取文件名并将其显示在我的视图中,但这样做效果不佳,因为我不重复使用图像我只想不打扰他们存储他们。
到目前为止,我的解决方案基于以下想法Can an ASP.NET MVC controller return an Image?。
在我的控制,我有:
public ActionResult GetImage(GraphData GraphData)
{
Response.ContentType = "image/png";
using (var ms = new MemoryStream())
{
var chart = GraphService.GetChart(GraphData.ResponseItems,GraphData.QuestionDisplaySetup,GraphData.QuestionCutOffs,250,250);
chart.SaveImage(ms, ChartImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
return File(ms.ToArray(), "image/png");
}
}
,然后在.cshtml文件:
foreach (var item in @Model.GraphDataList)
{
<img src="@Url.Action("GetImage", "Download", new { GraphData = item})" alt="" />
}
和模型:
public class GraphData
{
public IEnumerable<ResultItem> ResultItems { get; set; }
public ResultDisplaySetup ResultDisplaySetup { get; set; }
public IEnumerable<ResultCutOff> ResultCutOffs { get; set; }
}
但正如你可能已经猜到了由这个问题不起作用。
如果我做我的.cshtml /视图:
Html.RenderAction("GetImage", "Download", new { GraphData = filename });
然后我皮卡在我的控制器操作的对象没有任何问题,但我不能使用,在img标签和ASP.NET MVC null model passed to controller action告诉me @ Url.Action不能发送复杂的对象。
我摔倒了一只兔子,试图自己生成序列化对象,并使用RouteValueDictionary和tagbuilder编写我自己的url生成器,这可能是可能的。一个例子是: Passing an object to HTML attributes
但这个例子太简单了,很明显,所以我是因为我不能完全得到的东西工作。
我有一个额外的复杂性,可能Html.RenderAction不会在已发布的网站上工作,因为它不在网站的根目录(例如/ whatever/MyWebSite),这是出于安全目的,而且太难了立即改变。
无论如何,它似乎是我对框架而不是它的工作。任何想法的人?
谢谢!
你想让URL看起来像什么? – SLaks
如果您正在使用GDI +在服务器上绘制图像,您可以考虑将它转换为在本机上以HTML 5在客户端上绘制它,如果这是一个选项。 –