65

外部jsファイルでは、使用できません

url = "@Url.Action("Action", "Controller")" 
//url output : @Url.Action("Action", "Controller")
//I get IllegalPath Name error.

私がこのように書くとき:

url = "/Controller/Action"

プロジェクトがサブフォルダーの下にある場合、スクリプトは機能しません。相対 URL として次のようなものが必要です。

url = "~/Controller/Action"

これどうやってするの?ありがとう。

4

5 に答える 5

163

.js ファイルは asp.net mvc ビュー エンジンによって解析されないため、そこで c# コードを使用することはできません。このような目立たないアプローチを使用することをお勧めします

<div id="loader" data-request-url="@Url.Action("Action", "Controller")"></div>

そしてJavaScriptでは、次の値を使用しますdata-request-url

$(function(){
   $('#loader').click(function(){
       var url = $(this).data('request-url');
       alert(url);
   });
});
于 2012-11-30T08:04:40.413 に答える
8

これが最も洗練されたソリューションかどうかはわかりませんが、私が行ったことは、レジスタと外部スクリプトの実際の実装を区別することでした。

<script>...</script>
... include all the external scripts I need

$(document).ready(function(){

    //get all the information you need from your MVC context 
    //before going out of context and into the scripts
    var url = '@Url.Action("Action", "Controller")'; 


     RegisterMyFunction(url, other parameters ..);
     RegisterAnotherFunction(url, others...);
}

そのため、私の見解では、レジスタ関数のみがあり、スクリプトには、必要なことを行うためのパラメーターとして特別な値が含まれていました。

それが役に立てば幸い、

于 2012-11-30T07:16:38.917 に答える
0

受け入れられた回答が説明したように、外部 JS ファイルで C# コードを使用することはできません。外部の .js ファイルにいくつかのコントローラー リンクを渡す必要がある場合、通常は次のようにします。

C# (.cshtml) の場合

<script src="~/js/myfile.js"></script>

<script type="text/javascript">

    var url1 =  "@Url.Action("ActionName", "ControllerName", new { Param = ViewBag.Param })";  
    var url2 = "@Url.Action("AnotherAction", "AnotherController")";

    $(function() {
        window.initScript(url1, url2);
    });

</script>

myfile.js 内

var _url1;
var _url2;

function initScript(url1, url2) {
    _url1 = url1;
    _url2 = url2;

   // other init. codes...

}
于 2018-07-11T17:28:30.433 に答える