在ASP.NET MVC 2标记中嵌入javascript变量

在ASP.NET MVC 2标记中嵌入javascript变量,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我在MVC视图中有一个Javascript语句,看起来像这样,并且可以工作: win.attachURL('<%: Url.Action("GraphDetails", "Dashboard", new { area = "Anglian", OSName = "Hello" }) %>'); win.attachURL(“”); 当我试图提取变量“Hello”并将其放入javascript变量(id)中,然后像这样将其嵌入我的标记时,它会中断: var id = "Hello"

我在MVC视图中有一个Javascript语句,看起来像这样,并且可以工作:

win.attachURL('<%: Url.Action("GraphDetails", "Dashboard", new { area = "Anglian", OSName = "Hello" }) %>');
win.attachURL(“”);
当我试图提取变量“Hello”并将其放入javascript变量(id)中,然后像这样将其嵌入我的标记时,它会中断:

var id = "Hello";
win.attachURL('<%: Url.Action("GraphDetails", "Dashboard", new { area = "Anglian", OSName = "' + id + '" }) %>');
var id=“Hello”;
win.attachURL(“”);
问题是,如何在ASP服务器标记中嵌入JS变量,而ASP服务器标记本身已经嵌入到Javascript中了?这是一个本地原型,安全问题不是问题

谢谢,


汤姆。

我认为你一般不会。在这种情况下,至少在页面加载时对该部分进行评估,并且不会再次运行

相反,您可以用JavaScript计算,例如

var id = "Hello";
var baseURL = '<%: Url.Action("GraphDetails", "Dashboard",
                              new { area = "Anglian" }) %>';
win.attachURL(baseURL + '&OSName=' + id);
var id=“Hello”;
var baseURL='';
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);
var id=“Hello”;
var baseURL='';
win.attachURL(baseURL.replace('ZZZ',id));
但这很有可能出错,特别是如果您将用户生成的字符串输入到字符串中的其他参数中,这些参数可能会影响您替换的值


如果确实要再次运行Url.Action,则必须使用参数对已知Url进行AJAX调用以获取Url,这真是太过分了。

一个是服务器端,另一个是客户端,不能将两者混用

当您在服务器端以id作为变量执行此操作时,它将中断,因为id在服务器端上下文中不存在

你为什么不试着从客户的角度打破这种说法呢

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

注意:在附加
?OSName
时,如果您的路线没有100%正确映射,这可能会导致一些问题。例如,您得到
/Dashboard/GraphDetails?area=“Anglian”
并附加另一个“?”这将是一个无效的URL。另一方面,如果您的路线与100%匹配,并且您附加
”&OSName,这也将是无效的“
因此,请先检查一下,它的工作方式很有魅力,非常适合作为临时解决方案。我应该自己考虑一下。谢谢!不能混合使用服务器端和客户端?那么
做什么呢?:)