2011-01-20 113 views
1

內JavaScript變量我有,看起來像這樣和作品的MVC視圖JavaScript語句:嵌入ASP.NET MVC 2標籤

win.attachURL('<%: Url.Action("GraphDetails", "Dashboard", new { area = "Anglian", OSName = "Hello" }) %>'); 

當我嘗試提取變量「你好」,並把它變成javascript變量(ID),隨後將其嵌入到自己的廣告代碼這樣的,它打破:

var id = "Hello"; 
win.attachURL('<%: Url.Action("GraphDetails", "Dashboard", new { area = "Anglian", OSName = "' + id + '" }) %>'); 

的問題是,我該如何嵌入ASP服務器標籤內的JS變量,這本身就已經是嵌入的JavaScript?這是針對本地原型的,安全問題不是問題。

謝謝,

湯姆。

回答

1

我不認爲你可以在一般情況下。在這種情況下,頁面加載時至少會對零件進行評估,並且將永不再運行。相反,你可以用JavaScript來計算這個值,例如,

var id = "Hello"; 
var baseURL = '<%: Url.Action("GraphDetails", "Dashboard", 
           new { area = "Anglian" }) %>'; 
win.attachURL(baseURL + '&OSName=' + id); 

然而,這是假設你如何組裝你的路由參數的路由。您可以使用Url.Action來生成具有虛擬值的完整路由,然後替換,例如

var id = "Hello"; 
var baseURL = '<%: Url.Action("GraphDetails", "Dashboard", 
           new { area = "Anglian", OSName="ZZZ" }) %>'; 
win.attachURL(baseURL.replace('ZZZ', id); 

但後來有一個微妙的機會,這可能會出錯,特別是如果你硬塞給用戶生成的字符串轉換成字符串在那裏他們可以打你替換值等參數。

如果你真的想再次運行Url.Action,你必須使用參數將AJAX調用回一個已知的URL來獲取URL,這真是太過於誇張了。

+0

工程就像一個魅力和偉大的臨時解決方案。應該想到這個我自己。謝謝! – Thomas 2011-01-20 12:42:27

2

一個是服務器端,另一個是客戶端,你不能混合這兩個。

當你在服務器端使用id作爲變量時,它會中斷,因爲服務器端上下文中不存在id。

爲什麼不嘗試在客戶端分解聲明?

var id = "Hello"; 
var actionInit = "<%: Url.Action("GraphDetails", "Dashboard", new { area = "Anglian"}) %>"; 
win.attachURL(actionInit + "?OSName=" + id"); 

注:附加?OSName時,這可能會導致一些問題,如果您的路線不正確映射100%。例如。你得到/Dashboard/GraphDetails?area="Anglian"並且你附加了另一個「?」這將是一個無效的網址。另一方面,如果您的路線匹配100%,並且您追加"&OSName".,那麼它也將無效。因此,請首先檢查出來

+0

不能混合使用服務器端和客戶端?那麼`<%: %>`做什麼? :) – bzlm 2011-06-27 20:21:06