将变量值从c#传递到javascript
首先,很抱歉提出了一个已经被回答了这么多次的问题,但是我已经尝试了上面提到的大多数步骤,仍然无法让它工作 我有一个ASP.NET应用程序(服务器端),我想通过使用WebGL(JavaScript,客户端)可视化一些结果。我能够在aspx文件中创建画布,并通过在jscript文件中写入所有必要的JS代码(只要我事先知道要绘制的内容,并在jscript中写入所有内容)来绘制3D对象(立方体)。但是,我的目的是根据服务器端代码编写不同的对象。单击可视化按钮时,会触发回发。在服务器中执行一些代码,并在aspx.cs文件中定义的全局数组中返回一些坐标。我需要将节点坐标数组从服务器传递到JS文件,以便实际绘制我想要的对象 以下是我尝试过的基本内容:将变量值从c#传递到javascript,javascript,asp.net,arrays,parameter-passing,Javascript,Asp.net,Arrays,Parameter Passing,首先,很抱歉提出了一个已经被回答了这么多次的问题,但是我已经尝试了上面提到的大多数步骤,仍然无法让它工作 我有一个ASP.NET应用程序(服务器端),我想通过使用WebGL(JavaScript,客户端)可视化一些结果。我能够在aspx文件中创建画布,并通过在jscript文件中写入所有必要的JS代码(只要我事先知道要绘制的内容,并在jscript中写入所有内容)来绘制3D对象(立方体)。但是,我的目的是根据服务器端代码编写不同的对象。单击可视化按钮时,会触发回发。在服务器中执行一些代码,并在a
- 我发现传递变量的最简单方法是在aspx.cs(c#code)中声明一个公共属性,然后在JS中编写:
var clientVariable=''代码>
警报(clientVariable)代码>
我在窗口中看到“”,而不是实际值。我不知道我是否需要任何额外的图书馆或什么。如果我甚至不能让这个简单的例子工作,我甚至不知道如何使用双数组。我在HTML5中使用MCVS08、ASP.NET3.5
- 除此之外,我还尝试使用以下方法转换数组,而不是使用JSON:
Page.ClientScript.RegisterArrayDeclaration()代码>
- 我使用了
ClientScript.RegisterStartupScript(GetType(),“alert”,“test2(“+A+”);”,true)代码>
- 我尝试使用一个隐藏块来存储会话值,等等
所以基本上,总结一下,我想:
- 服务器端:在服务器中执行代码隐藏函数后,再次呈现页面时,我将在aspx.cs中有一个全局变量,它是双[,]坐标,包含将定义3D对象的节点坐标
- aspx:在html(不是asp.net)中,我有一个画布标记,我打算在其中进行可视化。将在客户端呈现图像的脚本存储在JScript文件中。在这个文件中,在一个函数中,我有一个变量var vertices=[];我需要将从服务器获得的值输入到坐标数组中。我不知道如何以最好的方式实现这一点。你会推荐使用AJAX吗
如有任何建议/意见,将不胜感激。由于带有简单字符串的虚拟示例不起作用(忘记了canvas、webGL和所有这些东西),我可能还需要其他东西,或者我误解了如何正确地完成它吗 你能像这样序列化数据吗:
<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var doublearr = <%= serializer.Serialize(ServerVariable) %>;
<html>
<header>
<script src="webgl-draw-file.js"/>
<script type=text/javascript>
window.WebGlDraw([{x:1, y:2}, {x:1, y:2}, {x:1, y:2}, {x:1, y:2}]);
</script>
</header>
<body>
...
</body>
</html>
var-doublearr=;
当我需要将变量传递到JavaScript中时,我通常更喜欢var-clientVariable=''代码>解决方案。这种方法对于少量的标量变量就足够了。如果需要传递复杂对象或数组,请考虑使用<代码> JavaScript PraceZiLister-<代码>。p>
你的这种行为可能有很多原因。如果您将scriptlet包含在.js
文件中,而不是包含在.aspx
文件中,则可能会出现其中一种情况
以下是我将如何做到这一点:
webgl-draw-file.js:
window.WebGlDraw = function(points /* point array */)
{
// Draw points here
}
Page1.aspx.cs:
public string GetSerializedServerVariable()
{
new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ServerVariable);
}
第1.aspx页:
<html>
<header>
<script src="webgl-draw-file.js"/>
<script type=text/javascript>
window.WebGlDraw(<%=this.GetSerializedServerVariable()%>);
</script>
</header>
<body>
...
</body>
</html>
window.WebGlDraw();
...
为了更好地理解传递给JS函数的值,请使用浏览器查看页面源代码。您应该看到数组的JSON表示,而不是
scriptlet
它应该是这样的:
<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var doublearr = <%= serializer.Serialize(ServerVariable) %>;
<html>
<header>
<script src="webgl-draw-file.js"/>
<script type=text/javascript>
window.WebGlDraw([{x:1, y:2}, {x:1, y:2}, {x:1, y:2}, {x:1, y:2}]);
</script>
</header>
<body>
...
</body>
</html>
WebGlDraw([{x:1,y:2},{x:1,y:2},{x:1,y:2},{x:1,y:2}]);
...
那么变量序列化程序是在Jscript或aspx.cs中定义的?我猜这是在后面的代码中,但只是为了弄清楚每个人应该放在哪里谢谢你的回应。首先,我仍然不明白为什么使用var-clientVariable=''代码>我没有得到值,但是我按照我说的那样打印了字符串。我将脚本src=“JSfile”包含在aspx文件中,这可能仅仅是因为我将它放在与aspx页面分离的JS文件中?此外,我将尝试您的解决方案,但在我看来,它没有正确地序列化数据(我的应用程序,不知道我是否仍然缺少smthg.Nm,我将在尝试您的代码后告诉您,thnx;)您的代码给了我以下错误:“System.Web.UI.Page”不包含“GetSerializedServerVariable”的定义。这是典型的错误,当它缺少一个库或一些#include,你认为我们缺少smthg吗?Ooops,修复了编译错误。Page.GetSerializedServerVariable()=>this.GetSerializedServerVariable()是的,您没有将该值序列化,因为它位于单独的JS文件中。这些scriplets只能在.aspx/ascx文件中工作。谢谢,我可以看到所有的问题都是试图在一个单独的JS文件中使用这些scriplets,以便aspx文件“更干净”。我还没有尝试数组,但现在我实际得到了字符串变量的值,而以前我不能。再次感谢你!