@Html Image helper将图像显示为html代码

时间:2012-11-13 22:08:20

标签: razor html-helper google-visualization

我在看这个例子:

http://tinyurl.com/au3vydl

此示例使用帮助程序使用razor显示Google图形图像:

@Html.DrawChart("p", "40,60,40", "250x100", "Pie Chart")

此方法汇编正确的代码以返回图表:

<img src='http://chart.apis.google.com/chart?chs=250x100&amp;chd=t:40,60,40&amp;cht=p&amp;chl=Pie Chart' />

但是在浏览器中,它显示为html代码,而不是实际图像。如果我将帮助程序输出的完全相同的代码复制到视图中,则显示正常。有没有什么需要将@ Html.Helper的输出更改为代码而不是文字字符串?

帮助程序代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Web.Mvc;

namespace SolarCars.Helpers
{
    public static class GoogleChart
    {
        /// <summary>
        /// Draws the chart.
        /// </summary>
        /// <param name="helper">The helper.</param>
        /// <param name="chartType">Type of the chart.</param>
        /// <param name="chartData">The chart data.</param>
        /// <param name="chartSize">Size of the chart.</param>
        /// <param name="chartLabel">The chart label.</param>
        /// <returns></returns>
        public static string DrawChart(this HtmlHelper helper, string chartType, string chartData, string chartSize, string chartLabel)
        {
            StringBuilder chartHtml = new StringBuilder("<img src='http://chart.apis.google.com/chart?chs=");
            chartHtml.Append(chartSize);
            chartHtml.Append("&amp;chd=t:");
            chartHtml.Append(chartData);
            chartHtml.Append("&amp;cht=");
            chartHtml.Append(chartType);
            chartHtml.Append("&amp;chl=");
            chartHtml.Append(chartLabel);
            chartHtml.Append("' />");

            return chartHtml.ToString();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果在@或&lt;%:块中返回字符串,结果将自动转义。这是(我认为)MVC1和MVC2之间的变化。解决方法是让你的helper方法返回一个IHtmlString的实例。

public static IHtmlString DrawChart(...)

然后切换返回以返回新的HtmlString

return new HtmlString(chartHtml.ToString());