@{
int proID = 123;
int nonProID = 456;
}
<script>
var nonID = @nonProID;
var proID = @proID;
window.nonID = @nonProID;
window.proID = @proID;
</script>
輸出應該是這樣的:
2.
這是我解決了這個問題:
@{int proID = 123; int nonProID = 456;}
<script type="text/javascript">
var nonID = Number(@nonProID);
var proID = Number(@proID);
</script>
它是自我和它不涉及轉換到和從文本。
必須註意,雖然,因為數字是現在的對象不是原語和恰好等於運算符可能會出現非方式:
var y = Number(123)
alert(y === 123); // displays false
3.
由於razor語法錯誤可能妳工作的看法,而有問題的,我完全明白妳為什麽會想避開他們。這裏有幾個其他的選擇。
<script type="text/javascript">
// @Model.Count is an int
var count = '@Model.Count';
var countInt = parseInt('@Model.ActiveLocsCount');
</script>
引號作為分隔符,所以razor解析器是幸福的。不過,當然妳的C#詮釋壹個JS字符串中優先個為純粹主義者 CodeGo.net,第二個選項可能會更好。
如果有這樣做沒有razor語法錯誤,尤其是維護VAR的類型更好的辦法,我很想看看吧!
4.
它的工作原理,如果妳這樣做:
var proID = @proID + 0;
它產生的代碼是這樣的:
var proID = 4 + 0;
有點奇怪肯定的,但至少沒有更多的假語法錯誤。
可悲的錯誤仍報在VS2013,所以這並沒有得到妥善解決(還)。
5.
沒有那麽多的答案作為警示:這是還有-我以為我已經被預先等候為零的解決方案@(...)語法。即妳的代碼將是:
var nonID = 0@(nonProID);
var proID = 0@(proID);
獲得輸出,如:
var nonId = 0123;
我沒有意識到的是,這是JavaScript的(第3版)如何表示八進制/基8號和實際改變值。此外,如果您的"use strict";命令,那麽它會破壞妳的代碼完全是為八進制數字已被刪除。
我還在尋找壹個合適的解決方案了。
6.
我壹直在找這個方法:
function getServerObject(serverObject) {
if (typeof serverObject === "undefined") {
return null;
}
return serverObject;
}
var itCameFromDotNet = getServerObject(@dotNetObject);
這似乎令人對JS的側安全......最糟糕的情況下,妳最終會得到壹個空變量。
7.
我見過幾個方法來解決這個Bug的工作,和我跑計時測試,看看有什麽工作速度(
方法:
直
在這種方法中,razor語法被直接分配給變量。這是引發錯誤。作為基線,JavaScript的速度測試只是做了壹些給變量的直線。
通過`Number`構造
在這種方法中,我們結束了通話razor語法到`Number`構造,如'號(@ViewBag.Value)`。
parseInt函數
在這種方法中,razor語法放在引號內,並傳遞給`parseInt`函數。
返回值的函數
在這種方法中,壹個函數被創建簡單的把razor語法作為壹個並返回它。
類型檢查函數
在這種方法中,該函數執行基本的類型檢查(尋找空,基本)和返回值,如果它不為null。
使用上述每壹個for-loop重復每個函數調用10M的總整個循環得到。然後,該for循環重復30至每10M行動得到平均。這些是彼此以確定哪些行動比其他更快。
需要註意的是,因為它是JavaScript的運行狀態,其他人收到的實際數目將有所不同,但重要的是不實際的數目,但如何到其它號碼。
結果:
用直接的方法,來處理10M平均為98.033ms。使用Number構造函數產生每10M 1554.93ms.class似地,parseInt方法把1404.27ms。這兩個函數調用了97.5ms的簡單函數和101.4ms的函數。
了解最幹凈的代碼是直接然而,在Visual Studio中的bug,這個報告錯誤,並能與智能感知問題,並給出壹個blur的感覺是錯的。
最快的代碼是簡單的函數調用,而只能通過微弱優勢。因為我沒有做進壹步的分析,我不知道,如果這種差異具有統計學意義.class型檢查的函數也非常快,比直接只稍慢,包括可能的變量可以為空。這不是真的實用,不過,如果是不確定的(空的razor語法)連基本的函數將返回不確定的。
解析剃須刀價值為int,並通過構造函數運行它很慢,15倍速度慢的順序不是直接最有可能的Number構造函數實際上是在內部調用parseInt,這可以解釋為什麽它需要比簡單的長parseInt。然而,它們具有作為不要求壹個外部定義的(即其他的文件或應用程序)的函數來執行的優點,同Number構造器實際上是壹個整數的可見casting最小化到壹個字符串。
底線是,這些數字是通過10M叠代生成運行。在壹個項目中,速度是不可估量小。對於大多數,只需通過運行它Number構造方法可能是最可讀的代碼,盡管是最慢的。
8.
@{
int proID = 123;
int nonProID = 456;
}
<script>
var nonID = '@nonProID';
var proID = '@proID';
window.nonID = '@nonProID';
window.proID = '@proID';
</script>