0

ここで例を見ていました:

http://tinyurl.com/au3vydl

この例では、ヘルパーを使用して、かみそりを使用して 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();
        }
    }
}
4

1 に答える 1

1

@ または <%: ブロックで文字列を返す場合、結果は自動的にエスケープされます。これは (私が思うに) MVC1 と MVC2 の間の変更でした。これに対する解決策は、ヘルパー メソッドが IHtmlString のインスタンスを返すようにすることです。

public static IHtmlString DrawChart(...)

次に、新しいHtmlStringを返すように戻りを切り替えます

return new HtmlString(chartHtml.ToString());
于 2012-11-13T22:25:04.253 に答える