2013-11-22 26 views
0

我有一個相當簡單的問題,我似乎無法解決。在ASP.NET代碼塊中使用javascript變量

我有一個JavaScript代碼塊;

<script> 
var user = { 
     id: 1, 
     username: 'myname' 
}; 

window.location.href = '<%# Page.GetRouteUrl("member", New With {.member = --username--})%>'; 
</script> 

在上面的代碼,我需要從我的JavaScript對象與user.username更換--username-- ..我將不勝感激,如果你能幫助我做到這一點。

編輯

的用戶名是來自Facebook,我使用JavaScript API來獲取用戶的名字,我無法從服務器端的用戶名...

+0

爲什麼不從服務器端獲得'username'並在'GetRouteUrl'中使用? –

回答

1

您應該在服務器端使用一些佔位符作爲用戶名,並將其替換爲客戶端上的真實用戶名:

<script> 
var user = { 
     id: 1, 
     username: 'myname' 
}; 

window.location.href = '<%# Page.GetRouteUrl("member", New With {.member = "__USERNAME__"})%>'.replace('__USERNAME__', user.username); 
</script> 
+0

非常有趣的解決方案,我沒有想過以前..會試試這個,讓你知道..你確定這就像是最優化和正確的方法嗎?我的意思是這是如何正確地做出正常的? –

+0

我接受了這個答案,因爲它只是'有效'。然而,我不太喜歡這個解決方案,它聽起來比擁有服務器端文字更好。 –

+0

真實溶液(沒有文字)是創建一個服務器端操作(MVC)或一些其它處理程序(非MVC);比從js發佈userId到該動作,並重定向到服務器代碼中的正確url。如果需要,我可以爲MVC添加完整樣本。 – PashaPash

0

喜歡的東西:

window.location.href = '<%# Page.GetRouteUrl("member", New With {.member = %>' + user.username + '<%})%>'; 
+0

已經嘗試過,在發佈我的問題在這裏..給出錯誤.. –

0

只需不能

解釋: 在時間0:asp.net代碼塊將在服務器側進行評價

在時間1:評價標記將被髮送到客戶端(轉化所有的服務器端代碼塊HTML)

在時間1.1:JavaScript的瀏覽器進行評估,所以在這裏你不能訪問過去

的指導原則是:

  • 服務器端代碼可以生成客戶端代碼(例如字面控制可以生成HTML和JavaScript)
  • 客戶端代碼不能生成服務器端代碼(JavaScript或HTML級聯不能生成字面控制)

例如從服務器端將數據傳遞到客戶端

<div><asp:Literal runat="server" text="ServerSideVariableOnly" /></div> 

OR

<script> 
var pageurl = '<asp:Literal runat="server" text="AnotherServerSideVariable" />' 
</script> 

做你想做什麼,你有兩個選擇:你必須做出一個Ajax調用(客戶端<

  1. - - 服務器)獲取更多信息,或者,在加載頁面之前填充所需的數據。
+0

那麼,你可能是對的。就因爲你是對的,我不得不接受一個「哈克」的解決方案。因爲它獲取客戶端的設置,我不能構成我的字符串中的服務器端,但是我相信這也將是爲那些誰可能會遇到不同的情況比我現在有..感謝您的回答人一個偉大的答案.. –

相關問題