Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将变量值从c#传递到javascript_Javascript_Asp.net_Arrays_Parameter Passing - Fatal编程技术网

将变量值从c#传递到javascript

将变量值从c#传递到javascript,javascript,asp.net,arrays,parameter-passing,Javascript,Asp.net,Arrays,Parameter Passing,首先,很抱歉提出了一个已经被回答了这么多次的问题,但是我已经尝试了上面提到的大多数步骤,仍然无法让它工作 我有一个ASP.NET应用程序(服务器端),我想通过使用WebGL(JavaScript,客户端)可视化一些结果。我能够在aspx文件中创建画布,并通过在jscript文件中写入所有必要的JS代码(只要我事先知道要绘制的内容,并在jscript中写入所有内容)来绘制3D对象(立方体)。但是,我的目的是根据服务器端代码编写不同的对象。单击可视化按钮时,会触发回发。在服务器中执行一些代码,并在a

首先,很抱歉提出了一个已经被回答了这么多次的问题,但是我已经尝试了上面提到的大多数步骤,仍然无法让它工作

我有一个ASP.NET应用程序(服务器端),我想通过使用WebGL(JavaScript,客户端)可视化一些结果。我能够在aspx文件中创建画布,并通过在jscript文件中写入所有必要的JS代码(只要我事先知道要绘制的内容,并在jscript中写入所有内容)来绘制3D对象(立方体)。但是,我的目的是根据服务器端代码编写不同的对象。单击可视化按钮时,会触发回发。在服务器中执行一些代码,并在aspx.cs文件中定义的全局数组中返回一些坐标。我需要将节点坐标数组从服务器传递到JS文件,以便实际绘制我想要的对象

以下是我尝试过的基本内容:

  • 我发现传递变量的最简单方法是在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文件“更干净”。我还没有尝试数组,但现在我实际得到了字符串变量的值,而以前我不能。再次感谢你!