2013-08-22 65 views
0

傳遞一個服務器端變量到客戶端是沒有什麼太粗糙通靜態類的字符串常量到客戶方代碼

var Variable = '<%= ServerVaraible %>' 

其中ServerVaraible是公開的代碼隱藏訪問的東西,易peasy

現在可以說,我有一個靜態類這樣

namespace Server.Helpers 
{ 
    public static class QueryStringConstants 
    { 
     public static string CARID = "carId"; 
    } 
} 

爲什麼我不能去: VAR變量='<%= Server.Helpers.QueryStringC onstants.CARID%>」

如果我這樣做,我得到一個錯誤說

'System.Web.HttpServerUtility' does not contain a definition for 'Helpers' and no extension method 'Helpers' accepting a first argument of type 'System.Web.HttpServerUtility' could be found 

我相信我換貨要宣佈什麼,但我不是100%確定什麼.....

+0

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

相關提示謝謝 – Crudler

回答

0

Server代表屬於您所在類的屬性(Page),所以存在命名衝突。要訪問您的班級避免衝突,請使用global關鍵字,這會強制您使用完整的名稱空間:

var Variable = '<%= global::Server.Helpers.QueryStringConstants.CARID %>' 
+0

有趣。在試圖避免巨型重構時,我更喜歡你的解決方案到下面的@Nicholas,但是使用你的方法我現在在QueryStringConstants上得到一個NullReferenceException,這很奇怪,因爲它是一個靜態類 – Crudler

+0

'global ::'通常在命名衝突情況時很有用。您會在自動生成的代碼中看到它經常使用的情況,因爲當您使用它時,100%可以保證您引用了您想要的類型,沒有歧義,也沒有衝突的可能性。 –

+0

如果你已經發布了你的實際代碼,那麼你不可能在那裏得到一個'NullReferenceException' - 如果你看到它,它可能只是在調試器中給你錯誤的行,並且異常真的屬於其他東西附近。看看異常的堆棧跟蹤。 –

0

我能夠將您的類從Server.Helpers重命名爲ServerTest.Helpers,然後可以訪問該值。我相信Server關鍵字是保留的,因此當你去調用Server.Helpers時,它會嘗試在Server對象上找到不存在的Helpers類。