我试图在我的网络应用程序中创建一个饼图,允许用户交互(悬停,点击)。使用Chart帮助程序的Web表单版本可以很好地呈现饼图。但是图像映射总是空的:
List<string> items = new List<string>(new string[] {"what", "is", "wrong"});
List<decimal> values = new List<decimal>(new decimal[] { 1, 2, 3 });
Chart myChart = new Chart();
myChart.ChartAreas.Add(new ChartArea());
myChart.Series.Add(new Series("Data") { ChartType = SeriesChartType.Pie });
myChart.Series["Data"].Points.DataBindXY(items, values);
using (MemoryStream stream = new MemoryStream())
{
myChart.SaveImage(stream, ChartImageFormat.Jpeg);
string result = "<img usemap='#myMap' src='" + String.Format("data:image/jpeg;base64,{0}", Convert.ToBase64String(stream.ToArray())) + "' />";
return result + myChart.GetHtmlImageMap("myMap");
}
生成的图像映射:
<map name="myMap" id="myMap">
<area shape="rect" coords="0,0,0,0" alt="">
</map>
MS documentation包括这个非常有用的警告:&#34;如果将图表呈现为二进制流,则必须使用特殊技术来实现客户端图像映射。&#34;
我错过了什么?什么是&#34;特殊技术&#34; MS显然想保守秘密?
答案 0 :(得分:0)
与Chart
控件的任何形式一样,事物都是隐藏和分散的。
从this quote推导出来:
Chart.IsMapEnabled属性
说明
将此属性设置为false将禁用图像映射。这将 即使在以下情况下也会发生:
设置图表元素的Url,MapAreaAttributes,LabelMapAreaAttributes,LegendMapAreaAttributes或ToolTip属性。
MapArea对象已添加到MapAreasCollection对象中。
您需要在MapArea
的{{1}}集合中添加MapAreas
。
Chart.RenderType
可以找到更多提示:
<强> Chart.RenderType 强>
说明:
以下列表描述了图表图像的三种使用方式 渲染:
ImageTag呈现类型会导致临时文件保存到服务器上的磁盘。使用a在客户端显示图表 标记,其SRC属性设置为由指定的URL ImageLocationproperty。
如果指定了BinaryStreaming渲染类型,则服务器上没有临时图像文件。而是发送图表图像 作为二进制流,并使用带有SRC的标记显示 属性设置为另一个负责生成的.aspx页面 图表图片。
ImageMap的渲染类型会导致创建图像映射,但不会导致显示实际的图表图像。这个选项 只有在使用渲染类型为的图像映射时才应该使用 BinaryStreaming。