在Razor中使用JQuery变量

在Razor中使用JQuery变量,jquery,razor,Jquery,Razor,如何在jquery中使用Url.Action中的jquery变量 var id = "10"; window.location.href = '@Url.Action("MyAction", "MyController", new { id })'; 谢谢你不能在Razor中使用jQuery变量。 不能在razor中使用javascript变量的原因是razor在服务器中运行。Javascript在客户机中运行 但是,您可以将该url存储在javascript变量中,然后使用它构建所需的特定u

如何在jquery中使用
Url.Action
中的jquery变量

var id = "10";
window.location.href = '@Url.Action("MyAction", "MyController", new { id })';

谢谢你不能在Razor中使用jQuery变量。
不能在razor中使用javascript变量的原因是razor在服务器中运行。Javascript在客户机中运行

但是,您可以将该url存储在javascript变量中,然后使用它构建所需的特定url,即:

var url = '@Url.Action("MyAction", "MyController")';

window.location.href = url + "?id=" + id;
如果您需要传递多个参数,并且不想处理创建带有?param1=X¶m2=Y等参数的字符串,则可以使用jQuery的param方法,即:

window.location.href = url + "?" + $.param({id:10, param2:"hello"});

$.param({id:10,param2:“hello”})
返回id=10¶m2=hello

如果我正确理解您的问题。。
为了实现这一点,我将使用jQuery对Razor页面进行Ajax调用,将jQuery参数作为GET/POST传递,然后在Razor页面上检索GET/POST,并通过Ajax传递回一些内容。

jQuery、javascript语句和变量在浏览器中进行计算。Razor在web服务器中进行评估。所以你不能做你想做的事。但如果在razor变量中设置值,则可以在razor和javascript代码中使用它

尝试,通过放置令牌替换函数:

var id = "10";
var actionUrl = "@Url.Action("MyAction","MyController", new { Id= "TabId" })";
window.location.href = actionUrl.replace("TabId", id);

为了完成这组可能的答案,如果变量值是已知的服务器端(您还没有阐明这一点),您还可以将Razor值注入javascript:

例如 如果该值仅为客户端已知,则可以使用Zaheer Ahmed和Rui建议的客户端替换


如果您需要处理空案例,并且想要删除额外的参数,我甚至会使用正则表达式来匹配替换:

问题是,您的id是否需要在客户端设置?或者也可以使用Razor在服务器端设置“10”的值(例如,如
var id=“@(myServerValue)”
@Url.Action(“MyAction”、“MyController”、new{id=myServerValue})
)+1:如果值需要来自客户端,则令牌替换是一个很好的解决方法。这允许使用比简单地将参数附加到URL更复杂的URL。@TrueBlueAustie如果您不想发送任何值,即您有一个可为空的字段,该怎么办。这种方法行不通,最好发送一个空字符串,例如Id=1&SomeNullableField=&SomeOtherField=2@Rui:在本例中,这似乎不太可能,但是类似于
/[?&]Id=TabId/
等的
regex
替换将实现这一点(如果您想要空值)。下面的示例的问题在于它确实处理其他参数(在使用
操作时经常发生)。然后您需要处理
&
案例。@TrueBlueAussie处理?如果您使用jQuery,例如
$.param({id:10,someOtherParameter:20})
->id=10&someOtherParameter,那么&实际上不是问题=20@TrueBlueAussie为了反映这一点,我更改了答案。我喜欢令牌替换答案的唯一原因是,我个人讨厌代码中字符串串联引起的维护问题。另外,这个问题是一个非常简单的例子,所以只需要一个非常简单的解决方案。
var id = "@(myServerValue)";
window.location.href = @Url.Action("MyAction", "MyController", new { Id = myServerValue }))