在JavaScript中为ASP.NET MVC生成操作URL

can*_*xss 19 javascript asp.net asp.net-mvc

我正在尝试通过使用特定参数调用控制器中的操作来重定向到另一个页面.我正在尝试使用这一行:

window.open('<%= Url.Action("Report", "Survey",
    new { id = ' + selectedRow + ' } ) %>');
Run Code Online (Sandbox Code Playgroud)

但我无法使它发挥作用; 它给出以下错误:

CS1012: Too many characters in character literal.

我不能生成客户端的动作URL吗?或者我是否必须通过提供参数并获取所需的URL来进行Ajax调用?这似乎不对,但我想,如果这是唯一的方法.

有更简单的解决方案吗?

Dyl*_*tie 53

请记住,<%和%>之间的所有内容都被解释为C#代码,因此您实际在做的是尝试评估以下C#行:

Url.Action("Report", "Survey", new { id = ' + selectedRow + ' } )
Run Code Online (Sandbox Code Playgroud)

C#认为单引号围绕着一个字符文字,因此你得到的错误信息(字符文字在C#中只能包含一个字符)

也许您可以在页面脚本中生成一次URL - 在页面HEAD的某个位置,执行以下操作:

var actionUrl =
    '<%= Url.Action("Report", "Survey", new { id = "PLACEHOLDER" } ) %>';
Run Code Online (Sandbox Code Playgroud)

这将为您提供包含所需URL的Javascript字符串,但使用PLACEHOLDER而不是数字.然后将您的点击处理程序设置为:

window.open(actionUrl.replace('PLACEHOLDER', selectedRow));
Run Code Online (Sandbox Code Playgroud)

即,当处理程序运行时,您会在预先计算的URL中找到PLACEHOLDER值,并将其替换为所选行.


Jac*_*ius 9

我通常在该部分声明一个javascript变量来保存我的网站的根目录.

<%="<script type=\"text/javascript\">var rootPath = '"
    + Url.Content("~/") + "';</script>" %>
Run Code Online (Sandbox Code Playgroud)

为了解决你的问题,我会这样做

window.open(rootPath + "report/survey/" + selectedRow);
Run Code Online (Sandbox Code Playgroud)