C# 从HTML助手调用Javascript
我已经编写了一个定制的HTMLHelper,可以输出一些javascript。javascript正在添加到页面中,但在页面加载时它没有运行。如果我将生成的JS复制/粘贴到Chrome的控制台窗口中,脚本就可以完美地工作。我想做的事情可能吗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
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中,它已经有了一个渲染引擎。