可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How can I access JavaScript value inside @URL.Action()
?
something like:
<script type="text/javascript">
function name(myjavascriptID)
{
jQuery("#list_d").jqGrid('setGridParam', { url: '@URL.Action("download file", "download", new { id = <myjavascriptID> })', page: 1 });
}
</script>
回答1:
You can't. JavaScript doesn't execute when generating the action URL. What you can do, is do something like this:
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.
回答2:
I do something fairly similar, but less verbose:
var myUrl = '@Url.Action("Solution","Partner")/' + myjavascriptID;
$.ajax.load(myUrl); // or whatever
We can do this because of routing, and ultimately Url.Action with route dictionary parameters translates into a URI that looks like:
http://localhost:41215/Partner/Solution?myJavascriptID=7
Just a second choice, because as a wise old man once said "It is our choices, Harry, that show what we truly are, far more than our abilities."
回答3:
You can pass in the variables to any link as shown below...
var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID
回答4:
You can build the JavaScript code in C# this way:
function fun(jsId) {
var aTag = '<a href="@Html.Raw(@Url.Action("ActionName", "ControllerName", new { objectId = "xxx01xxx" }).Replace("xxx01xxx", "' + jsId + '"))">LINK</a>';
}
Here is the code from the question rewritten using this technique:
function name(myjavascriptID) {
jQuery("#list_d").jqGrid('setGridParam', { url: '@Html.Raw(@URL.Action("download file", "download", new { id = "XXXmyjavascriptIDXXX" }).Replace("XXXmyjavascriptIDXXX", "' + myjavascriptID + '"))', page: 1 });
}
回答5:
In the same vein as Brian Mains's answer, you could format your url string instead of replacing -1 with your variable, that is if like me, you judge it is better to read. The following answer assumes that you've modified String
's prototype as suggested in this answer:
var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID);
The unescape
call is necessary if you want to decode your {0}
. I like this alternative, because it makes it easier to have multiple parameters from JS variables. For instance:
var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName);
I added Html.Raw
in my second example in order to avoid having &
in the url string.
回答6:
You can replace url like code below
var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)
$("#RenderPartial").load(getUrl);