2012-08-17 31 views
2

我已經搜索了我的問題的確定答案,但找不到答案。網站覆蓋了一個主題,但我無法找到我正在尋找的答案。在Javascript中使用C#/ VB.NET值

我有一個ASPX頁面,例如,處理客戶查詢。在後面的代碼中,我有一個Customer類。例如,如果我想在JavaScript函數中使用客戶ID和名稱。我做這件事的最好方法是什麼?

我有這樣的代碼(一個網站,我被要求更新),但我嘗試整理出所有警告VS顯示,並且此代碼顯示兩個。

<script type="text/javascript"> 
function DoSomeThingFunction(enable) 
{ 
    var enableStr = enable ? "on" : "off"; 
    var intClientID = <%= Customer.ClientID %>; 
    var strClientName = <%= Customer.ClientName %>; 

    <!-- 
     More functionality 
    --> 

}; 
</script> 
以下兩行

預計表達..

var intClientID = <%= Customer.ClientID %>; 
var strClientName = <%= Customer.ClientName %>; 

我可以更新這個代碼停止警告..

<script type="text/javascript"> 
function DoSomeThingFunction(enable) 
{ 
    var enableStr = enable ? "on" : "off"; 
    var intClientID = parseInt('<%= Customer.ClientID %>'); 
    var strClientName = '<%= Customer.ClientName %>'; 

    <!-- 
     More functionality 
    --> 

}; 
</script> 

我的問題是:什麼是最好的方法實現這一目標沒有得到任何形式的警告?最好的方法是否意味着我會得到警告,因此不得不忍受它?我討厭看到任何形式的警告,並試圖解決所有問題。

感謝您尋找

+0

警告,可惱人的,但只要生成的標記是有效的,它真的沒關係。但是,我使用與您的代碼非常相似的代碼來避免警告。 – jrummell 2012-08-17 15:12:06

+0

您的'strClientName'無論如何都需要字符串指定,但您幾乎堅持使用整數警告。唯一的其他選項(可能會導致可讀性受損)將是從代碼隱藏的註冊腳本中定義其中的一些變量(假設它們是頁面全局的)。 – 2012-08-17 15:16:03

+0

感謝您的回覆。我想有很多方法可以實現這一點,而不會收到警告,也許我會在VS警告中掛斷電話。它很難決定哪一個標記爲答案,因爲它們都增加了整體答案。 – Fred 2012-08-18 08:38:06

回答

1

第一個代碼塊是我過去如何做到的。如果該值是單引號或雙引號字符串。數字沒有問題沒有引號。

另一種方法是在頁面中使用隱藏字段。

<input type="hidden" id="customerId" value="1234" /> 
<input type="hidden" id="customerName" value="John Doe" /> 

<script type="text/javascript"> 
function DoSomeThingFunction(enable) 
{ 
    var enableStr = enable ? "on" : "off"; 
    var intClientID = $('input#customerId').val(); //using jQuery to retrieve the value 
    var strClientName = $('input#customerName').val(); 

    <!-- 
     More functionality 
    --> 

}; 
</script> 

我不擔心VS的警告,其實我很少看他們。大多數情況下,代碼仍能按預期工作,特別是在涉及html,css和javascript時,警告已過時。

0

如果你知道客戶端ID是一個整數,CLIENTNAME是一個字符串,你有第二個代碼塊要好得多。我在想,VS中的JS驗證器看到了作業,並且因爲它不能確認<%= ...%>是數字數據類型,所以它希望看到它周圍的引號。另外,如果ClientName實際上是一個字符串,那麼JS在運行時會失敗,因爲字符串需要被引號括起來。

1

我會用下面的代碼從(預渲染爲例)註冊變量:

Page.ClientScript.RegisterClientScriptBlock(GetType(), "variables", 
    String.Format("var intClientID = {0};var strClientName = '{1}';", 
    Customer.ClientID, 
    Customer.ClientName), 
    true);