繁体   English   中英

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

[英]How to access javascript variable within @URL.Action()

如何访问@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 });
}

我做了一些非常相似但不那么冗长的事情:

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

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

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

只是第二个选择,因为正如一位聪明的老人曾经说过的那样,“这是我们的选择,哈利,展示了我们的真实身份,远远超过我们的能力。”

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

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

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

我在第二个示例中添加了Html.Raw以避免在 url 字符串中包含&amp

您可以通过以下方式在 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 });
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM