C# 从HTML助手调用Javascript

C# 从HTML助手调用Javascript,c#,javascript,asp.net-mvc,html-helper,C#,Javascript,Asp.net Mvc,Html Helper,我已经编写了一个定制的HTMLHelper,可以输出一些javascript。javascript正在添加到页面中,但在页面加载时它没有运行。如果我将生成的JS复制/粘贴到Chrome的控制台窗口中,脚本就可以完美地工作。我想做的事情可能吗 public static HtmlString CreatePieChart(this HtmlHelper helper, string divId, int width, Collection<PieChartSeriesItem> ser

我已经编写了一个定制的HTMLHelper,可以输出一些javascript。javascript正在添加到页面中,但在页面加载时它没有运行。如果我将生成的JS复制/粘贴到Chrome的控制台窗口中,脚本就可以完美地工作。我想做的事情可能吗

public static HtmlString CreatePieChart(this HtmlHelper helper, string divId, int width, Collection<PieChartSeriesItem> series)
    {            
        if (width < 1)
        {
            throw new System.ArgumentException("Width of pie chart must be greater than zero");
        }

        StringBuilder htmlString = new StringBuilder();
        htmlString.Append("<script type=\"type/javascript\">");
        htmlString.Append("$(window).load(\"#");
        htmlString.Append(divId);
        htmlString.Append("\").kendoChart({");
        htmlString.Append("title: { visible: false },");
        htmlString.Append("chartArea: { background: \"transparent\", width: ");
        htmlString.Append(width.ToString(CultureInfo.InvariantCulture));
        htmlString.Append(" },");
        htmlString.Append("legend: { visible: false },");
        htmlString.Append("seriesDefaults: { labels: { visible: false } },");
        htmlString.Append("series: [{");
        htmlString.Append("type: \"pie\",");
        htmlString.Append("padding: 0,");
        htmlString.Append("overlay: { gradient: \"none\"},");
        htmlString.Append("data: [");

        htmlString.Append(CreatePieChartDataSeriesString(series));

        htmlString.Append("]");
        htmlString.Append("}],");
        htmlString.Append("tooltip: { visible: true, template: \"#= category # (#= value #%)\"}");
        htmlString.Append("});");
        htmlString.Append("</script>");

        return new HtmlString(htmlString.ToString());
    }
公共静态HtmlString CreatePieChart(此HtmlHelper帮助程序,字符串divId,int-width,集合系列)
{            
如果(宽度<1)
{
抛出新System.ArgumentException(“饼图的宽度必须大于零”);
}
StringBuilder htmlString=新的StringBuilder();
htmlString.Append(“”);
htmlString.Append($(窗口).load(\“#”);
htmlString.Append(divId);
htmlString.Append(“\”).kendoChart({”);
追加(“标题:{visible:false},”);
追加(“图表区:{背景:\'transparent\”,宽度:);
Append(width.ToString(CultureInfo.InvariantCulture));
追加(“},”);
追加(“图例:{visible:false},”);
Append(“序列默认值:{labels:{visible:false}},”);
附加(“系列:[{”);
追加(“类型:\'pie\',”);
Append(“padding:0,”);
Append(“覆盖:{gradient:\'none\'},”;
追加(“数据:[”);
Append(CreatePieChartDataSeriesString(series));
htmlString.Append(“]”);
htmlString.Append(“}]”,“”;
Append(“工具提示:{visible:true,模板:\”\“\\=category\(\\=value%)\”)”;
htmlString.Append(“}”);”;
htmlString.Append(“”);
返回新的HtmlString(HtmlString.ToString());
}
这是页面上的呼叫

<div id="piechart">
    @Html.Partial("_PieChart", Model.BalancePieChartData)
</div>

@Html.Partial(“\u PieChart”,Model.balancepiechart数据)

我试过这个,效果很好

public static MvcHtmlString Test(this HtmlHelper htmlHelper)
    {
        StringBuilder htmlString = new StringBuilder();
        htmlString.Append("<script type=\"text/javascript\">");
        htmlString.Append("alert(1)");
        htmlString.Append("</script>");
        return new MvcHtmlString(htmlString.ToString());
    }
而且我的浏览器工作正常警报1

所以我想也许你只是把这句话写错了

htmlString.Append("<script type=\"type/javascript\">");
htmlString.Append(“”);

应该是“text/javascript”

我已经试过了,效果很好

public static MvcHtmlString Test(this HtmlHelper htmlHelper)
    {
        StringBuilder htmlString = new StringBuilder();
        htmlString.Append("<script type=\"text/javascript\">");
        htmlString.Append("alert(1)");
        htmlString.Append("</script>");
        return new MvcHtmlString(htmlString.ToString());
    }
而且我的浏览器工作正常警报1

所以我想也许你只是把这句话写错了

htmlString.Append("<script type=\"type/javascript\">");
htmlString.Append(“”);

它应该是“text/javascript”

尝试添加例如
console.log(“Test#n”)
,然后看看是否正在执行,在jQuery导入后脚本是否正在呈现?请不要这样添加JS。此外,执行这种模板可能很难读取/更改。我最近遇到了RazorEngine项目,这对于这类事情来说可能非常好:-尽管如此,我还是同意@tereško的观点,即以这种方式导入JS并不理想。最好在“客户端”移动JS,然后将您的集合系列转换为您可以使用的JSON。@Sean他已经在ASP.NET MVC中,它已经有了一个渲染引擎。请尝试添加例如
console.log(“Test#n”)
然后看看是否正在执行jQuery导入后脚本是否正在呈现?请不要以这种方式添加JS。此外,执行这种模板可能很难读取/更改。我最近遇到了RazorEngine项目,这对于这类事情来说可能非常好:-尽管如此,我还是同意@tereško的观点,即以这种方式导入JS并不理想。最好将JS移到“客户端”,然后将您的集合系列转换为您可以使用的JSON。@Sean He已经在ASP.NET MVC中,它已经有了一个渲染引擎。