簡體   English   中英

將變量值從C#傳遞到javascript

[英]passing variable values from c# to javascript

首先,很抱歉提出了一個已經回答了很多次的問題,但是我已經嘗試了上面提到的大多數過程,但仍然無法使它起作用。

我有一個ASP.NET應用程序(服務器端),我想通過使用WebGL(JavaScript,客戶端)來可視化一些結果。 通過在jscript文件中編寫所有必要的JS代碼(只要我知道我要提前繪制的內容,並在其中編寫所有內容),我就可以在aspx文件中創建畫布並繪制3D對象(立方體)。 Jscript)。 但是,我的意圖是根據我的服務器端代碼編寫一個不同的對象。 當我單擊可視化按鈕時,將觸發回發。 在服務器中,一些代碼被執行,並且一些坐標以數組形式返回,該數組在aspx.cs文件中全局定義。 我需要將節點坐標數組從服務器傳遞到JS文件,以便實際繪制我想要的對象。

這基本上是我嘗試過的:

  • 我發現傳遞變量的最簡單方法是在aspx.cs(C#代碼)中聲明一個公共屬性,然后在JS編寫中: var clientVariable = '<%=ServerVariable%>';

我試過的不是數組,而是字符串變量,如果寫的話: alert(clientVariable); 我在窗口中看到“ <%= ServerVariable%>”,而不是實際值。 我不知道我是否需要任何其他圖書館或什么。 如果我什至無法使這個簡單的示例正常工作,那么我什至不知道如何使用雙數組來實現。 我正在使用MCVS08,帶有HTML5的ASP.NET 3.5。

  • 除此之外,我嘗試不使用JSON而是使用Page.ClientScript.RegisterArrayDeclaration();來轉換數組Page.ClientScript.RegisterArrayDeclaration();

  • 我用過ClientScript.RegisterStartupScript(GetType(), "alert", "test2('" + A + "');", true);

  • 我試圖使用一個隱藏的塊來存儲會話值,等等。

所以基本上,總結起來,我希望擁有:

  • 服務器端:在服務器中執行后台代碼的功能后,再次渲染頁面時,我將在aspx.cs中有一個全局變量,它是double [,]坐標,其中包含將定義3D的節點的坐標賓語。

  • aspx:在html中(不是asp.net),我有一個canvas標簽,打算在其中進行可視化處理。 將呈現圖像客戶端的腳本存儲在JScript文件中。 在這個文件中,在函數中我有一個變量var vertices = []; 我需要使用從服務器獲取的坐標數組中的值進行輸入。 我不知道如何達到最佳效果。 您會建議使用AJAX嗎?

任何建議/評論將不勝感激。 由於帶有簡單字符串的虛擬示例無法正常工作(忘記了畫布,webGL和所有其他內容),我是否還需要其他任何東西,或者我誤解了如何正確地進行操作?

當我需要將變量傳遞到JavaScript時,通常我更喜歡var clientVariable = '<%=ServerVariable%>'; 解。 這種方法對於少量的標量變量就足夠了。 如果需要傳遞復雜的對象或數組,請考慮使用JavaScriptSerizlizer

您遇到的行為可能由於多種原因而發生。 如果您在.js文件中而不是.aspx文件中包含了scriptlet,則可能會發生其中一種情況。

這是我的處理方式:

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);    
}

Page1.aspx:

<html>
<header>
    <script src="webgl-draw-file.js"/>
    <script type=text/javascript>
        window.WebGlDraw(<%=this.GetSerializedServerVariable()%>);
    </script>
</header>
<body>
...
</body>
</html>

為了更好地了解將哪些值傳遞給JS函數,請使用瀏覽器查看頁面源。 您應該看到數組的JSON表示形式,而不是<%=Page.GetSerializedServerVariable()%>腳本。

它看起來應該像這樣:

<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 serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var doublearr = <%= serializer.Serialize(ServerVariable) %>;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM