web-dev-qa-db-ja.com

@ URL.Action()内のjavascript変数にアクセスする方法

@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>
72
Bolu

できません。アクション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。

131
Brian Mains

私はかなり似たようなことをしますが、それほど冗長ではありません:

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

ルーティングのためにこれを行うことができ、最終的にはルートディクショナリパラメータを持つUrl.Actionは次のようなURIに変換されます。

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

賢明な老人がかつて「ハリー、私たちの本当の姿を示すのは私たちの選択であり、私たちの能力よりもはるかに大きい」と言ったからです。

14
nocarrier

以下に示すように、変数を任意のリンクに渡すことができます...

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

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番目の例に&ampを追加しました。

0
actaram

以下のコードのようなURLを置き換えることができます

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

この方法で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 });
}
0
xMaa