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

如何访问 @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>
106293 次浏览

你不能。JavaScript 在生成操作 URL 时不执行。你能做的,就是这样做:

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 });
}

我做了一些相当类似的事情,但没有那么冗长:

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

我们可以这样做,因为路由,并最终 Url。使用路由字典参数的操作转换为一个 URI,其外观如下:

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

这只是第二个选择,因为一位睿智的老人曾经说过: “这是我们的选择,哈利,它展示了我们的真实面目,远远超过我们的能力。”

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

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

你可以这样在 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 });
}

与 Brian Mains 的回答一样,你可以格式化你的 url 字符串,而不是用变量替换 -1,也就是说,如果你像我一样,判断它是更好的阅读。下面的答案假设您已经按照 这个答案中的建议修改了 String的原型:

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

如果你想解码你的 {0}unescape调用是必要的。我喜欢这种替代方法,因为它使得从 JS 变量获得多个参数变得更加容易。例如:

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

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

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

var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)
$("#RenderPartial").load(getUrl);