我使用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在客戶端上繪製它,如果這是一個選項。 –