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

时间:2011-06-23 15:34:05

标签: javascript asp.net-mvc asp.net-mvc-3 razor

如何在@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>

6 个答案:

答案 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,以避免在网址字符串中显示&amp

答案 5 :(得分:0)

您可以替换下面的代码

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