【问题标题】:Javascript in code behind using LiteralJavascript 在代码后面使用 Literal
【发布时间】:2018-01-30 11:51:45
【问题描述】:

我正在尝试在后面的代码中编写我的 js 代码。我已经定义了一个名为“contentPie”的文字,然后将 javascript 代码放在它的文本中。但它不起作用。

contentPie.Text = "<script>window.onload = function() {var chart = new CanvasJS.Chart(" + chartContainer + ", { animationEnabled: true,data: [{type: \"pie\",startAngle: 240,indexLabel: \"{label} {y}\",dataPoints: [{ y: 79.45, label: \"Javascript\" },{ y: 7.31, label: \"CSS\" },{ y: 7.06, label: \"Image\" },{ y: 4.91, label: \"HTML\" },{ y: 1.26, label: \"Others\" }]}]});chart.render();}</ script >";

P.s,这个 javascript 代码是一个饼图模板。这是来源:https://canvasjs.com/html5-javascript-pie-chart/

顺便说一句,我不确定,但 > 这些标签可能是错误的。如果我犯了错误,请告诉我。

【问题讨论】:

  • 如果需要将数据从服务器传递到脚本,可以使用&lt;script type="application/json"&gt;...&lt;/script&gt;。您可以在其中放置一个文字并将您的数据序列化为 JSON。然后您的客户端脚本会读取它并将 JSON 解析为一个对象。它更干净,因为您的服务器代码没有将内容插入客户端脚本。它只是提供 JavaScript 读取的值。如果这听起来与您正在做的事情相关,那么我可以发布一个示例作为答案。
  • 事实上,我会考虑将整个内容封装在UserControl 中。控件拥有脚本和文字。如果页面需要与控件进行通信,它只是提供数据。然后该控件处理渲染脚本和填充它将读取的数据。

标签: javascript c# webforms


【解决方案1】:

不太清楚在服务器端编写客户端代码的原因。通常,这样做没有必要也不是一个好习惯。

但是根据您自己的情况,我认为您正在尝试将一些服务器端值传递给 javascript 代码,以便可以呈现饼图。

有几种方法可以做到这一点

使用服务器端标签

var chartContainer = <%= chartContainerFromCodeBehind %>;
<script>window.onload = function() { // your javascript code... }</ script >

使用ClientScriptManager

var yourJs = "window.onload = function() { ... }";
Page.ClientScript.RegisterStartupScript(GetType(), "yourKey", yourJsCode,true);

【讨论】:

  • 我需要一些来自服务器端的值。我实际上找不到另一种方法来做到这一点。我也试过 。没用
  • 应该是&lt;%=your var %&gt;&lt;%: your var %&gt;。你错过了那里的符号吗?
  • 是的,我忘记了“=”符号。我打算删除这个问题,但刚刚看到你写了答案。非常感谢你:)
  • @ovuncdeniz4 乐于提供帮助。如果您也标记答案,将不胜感激。谢谢。
【解决方案2】:

在文本前面加上@,一切都很好。不需要\" 在“'pie'”中使用单引号(')而不是双引号(“)

contentPie.Text = @"<script>window.onload = function() {var chart = new CanvasJS.Chart(" + chartContainer + ", { animationEnabled: true,data: [{type: 'pie',startAngle: 240,indexLabel: '{label} {y}',dataPoints: [{ y: 79.45, label: 'Javascript' },{ y: 7.31, label: 'CSS' },{ y: 7.06, label: 'Image' },{ y: 4.91, label: 'HTML' },{ y: 1.26, label: 'Others' }]}]});chart.render();}</ script >";

【讨论】:

  • 不幸的是无法正常工作。你检查源页面了吗?也许我从一开始就做错了什么?
  • 错误是什么。在开头附加“debugger”javascript关键字,然后查看。
  • contentPie.Text = @"
  • 2 个错误。 “未捕获的语法错误:意外的标识符”和“未捕获的错误:绘图的尺寸无效,宽度=null,高度=null”但我确实在 aspx 页面中这样定义它:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 2011-12-02
  • 2011-02-20
相关资源
最近更新 更多