如何在@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>
答案 0 :(得分:129)
你做不到。生成操作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。
答案 1 :(得分:14)
我做的事情非常相似,但不那么冗长:
var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID;
$.ajax.load(myUrl); // or whatever
我们可以这样做,因为路由,最终Url.Action与路由字典参数转换为如下所示的URI:
http://localhost:41215/Partner/Solution?myJavascriptID=7
只是第二个选择,因为作为一个聪明的老人曾经说过“这是我们的选择,哈利,这表明我们真正的东西,远远超过我们的能力。”
答案 2 :(得分:9)
您可以将变量传递给任何链接,如下所示......
var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
答案 3 :(得分: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 });
}
答案 4 :(得分:0)
与Brian Mains的答案一样,你可以格式化你的url字符串,而不是用你的变量替换-1,就像我一样,你判断它最好阅读。以下答案假定您已根据this answer中的建议修改了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
,以避免在网址字符串中显示&
。
答案 5 :(得分:0)
您可以替换下面的代码
var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)
$("#RenderPartial").load(getUrl);