如何在@ URL.Action()中访问javascript变量


76

如何访问内部的JavaScript值@URL.Action()?就像是:

<script type="text/javascript">
function name(myjavascriptID)
{
     jQuery("#list_d").jqGrid('setGridParam', { url: '@URL.Action("download file", "download", new { id = <myjavascriptID> })', page: 1 });

}
</script>

Answers:


139

你不能 生成操作网址时,JavaScript不执行。您可以做的是执行以下操作:

function name(myjavascriptID)    {
     var link = '@Url.Action("download file", "download", new { id = "-1" })';
     link = link.replace("-1", myjavascriptID);

     jQuery("#list_d").jqGrid('setGridParam', { url: link, page: 1 });
}

感谢您的回答,它做了一个小的修改:而不是link.href我需要使用link。非常感谢!
Bolu

如果id是像“ Hello world”这样的字符串怎么办?
Nic 2014年

这个想法是让-1在字符串中是唯一可识别的,以便您替换为所需的任何东西。您需要确保已对Hello World进行编码,例如Hello + World。但是,是的,将其替换为您想要的任何东西
Brian Mains

2
有没有更清洁的解决方案?
juF15年

1
删除前缀为的大写URL @URL.Action@Url.Action因为它显示了编译时错误
shaijut

16

我做了一些类似的事情,但不太冗长:

var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID;
$.ajax.load(myUrl); // or whatever

我们可以通过路由来做到这一点,最终带有路由字典参数的Url.Action会转换为一个URI,如下所示:

http://localhost:41215/Partner/Solution?myJavascriptID=7

只是第二个选择,因为正如一个睿智的老人曾经说过的:“哈里,这是我们的选择,显示了我们真正的能力,远远超出了我们的能力。”


它将破坏RoutAttribute配置:(((
Kate

11

您可以将变量传递到任何链接,如下所示...

var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID

1

与Brian Mains的回答一样,您可以设置url字符串的格式,而不用用变量替换-1,也就是说,如果像我一样,您认为读起来更好。以下答案假定您已String按照此答案中的建议修改的原型:

var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID);

unescape,如果你想你的电话解码是必要的{0}。我喜欢这种替代方法,因为这样可以更轻松地从JS变量中获取多个参数。例如:

var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName);

Html.Raw在第二个示例中添加了代码,以避免出现&amp在url字符串中。


添加您的答案与此,并且得到一个完美的答案:stackoverflow.com/a/36981170/453142
DavidLétourneau17年

0

您可以通过以下方式在C#中构建JavaScript代码:

function fun(jsId) {
  var aTag = '<a href="@Html.Raw(@Url.Action("ActionName", "ControllerName", new { objectId = "xxx01xxx" }).Replace("xxx01xxx", "' + jsId + '"))">LINK</a>';
}

这是使用此技术重写的问题代码:

function name(myjavascriptID) {
  jQuery("#list_d").jqGrid('setGridParam', { url: '@Html.Raw(@URL.Action("download file", "download", new { id = "XXXmyjavascriptIDXXX" }).Replace("XXXmyjavascriptIDXXX", "' + myjavascriptID + '"))', page: 1 });
}

0

您可以像下面的代码一样替换url

var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)  
$("#RenderPartial").load(getUrl); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.