@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 });
}
HTH。
私はかなり似たようなことをしますが、それほど冗長ではありません:
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の答えと同じように、-1を変数で置き換える代わりにURL文字列をフォーマットできます。つまり、私のようであれば、読む方が良いと判断します。次の答えは、 この答え で提案されているように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文字列にHtml.Raw
が含まれないようにするために、2番目の例に&
を追加しました。
以下のコードのようなURLを置き換えることができます
var jsUrl = '@Url.Action("action", "controller")'; // ## is the token
var getUrl = jsUrl.replace('action', action).replace('controller', controller)
$("#RenderPartial").load(getUrl);
この方法で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 });
}