2011-06-23 8 views
61

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

答えて

109

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

+0

あなたの答えをありがとう、それは1つの小さな変更で動作します: 'link.href'の代わりに' link'を使う必要があります。どうもありがとう! – Bolu

+0

Errはい、キャッチのおかげで、私はそれを削除しました。 –

+20

は汚れていると感じますが、機能します! –

9

私はかなり似たような、あまり冗長実行します。私たちは、ルーティングが原因でこれを行うことができ、そして最終的にルート辞書パラメータを持つUrl.Actionがどのように見えるそのURIに変換

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

を:

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

賢い老人が「これは私たちの選択であり、ハリー、私たちが本当に何を示しているかは、私たちの能力よりはるかに高い」と言ったからです。

+0

これはRoutAttributeの設定を破ります:(( – Kate

5

下図のようにあなたがいずれかのリンクに変数を渡すことができます...

var url = '@Html.Raw(@Url.Action("MethodName", "ControllerName"))' + '?id = ' + myjavascriptID 
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 }); 
} 
0

Brian Mainsの回答と同じ静脈で、あなたのurl strあなたの変数で-1を置き換えるのではなく、それは私のように読んだ方が良いと判断した場合です。以下の答えはthis answerで提案されているようにあなたがStringのプロトタイプを変更したことを想定しています。あなたは{0}をデコードする場合

var url = unescape('@Url.Action("download file", "download", new { id = "{0}" })').format(myjavascriptID); 

unescape呼び出しが必要です。私は、JS変数から複数のパラメータを持つ方が簡単なので、この代替案が気に入っています。例えば:

var url = unescape('@Html.Raw(Url.Action("Action", "Controller", new { id = "{0}", name = "{1}" }))').format(myID, myName); 

私は、URL文字列で&ampを避けるために、私の第二の例ではHtml.Rawを追加しました。

+0

この回答を追加して、完璧な答えを得ました:http://stackoverflow.com/a/36981170/453142 –

関連する問題