2011-01-20 125 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