如何在@ URL.Action()中访问javascriptvariables

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

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

你不能。 生成操作URL时,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 }); } 

HTH。

我做了一些非常相似的事情,但是不太详细:

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

我们可以这样做,因为路由,并最终Url.Action与路由字典参数翻译成一个URI,如下所示:

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

只是第二select,因为作为一个聪明的老人曾经说过:“这是我们的select,哈利,这显示我们真正的,远远超过我们的能力。”

您可以将variables传递给任何链接,如下所示…

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

你可以这样在C#中build立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 }); } 

与Brian Mains的回答一样,你可以格式化你的urlstring,而不是用你的variablesreplace-1,也就是说,如果像我一样,你认为阅读更好。 下面的答案假设你已经修改了String的原型,正如在这个答案中所build议的那样:

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

如果您想解码您的{0}unescape调用是必需的。 我喜欢这个select,因为它使得从JSvariables中获取多个参数变得更容易。 例如:

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

我在第二个示例中添加了Html.Raw ,以避免产生&amp ; urlstring。