2

MVC4を使用しています。

私の見解では、@Url.Action を使用してアクションの URL を簡単に取得できます。

ビューにすべてを書き込むのではなく、すべてのビューのjavascriptを含むjavascriptファイルを作成したかったのですが、問題は、かみそりのものをもう使用できないことです。

私の質問は、javascript で区切られたファイルからアクションの URL を取得するにはどうすればよいですか?

4

4 に答える 4

2

スクリプトで使用できるように、ビュー内で JavaScript 変数を定義する必要があります。明らかに、これは最初に宣言する必要があります。

これらすべての変数と、ページに固有のセクションを含むレイアウト ページでヘルパーを使用します。これらは、body タグの前の他のスクリプト参照の前に来ることに注意してください。

@Scripts.Variables()
@RenderSection("ScriptVariables", false)

Scripts.Variablesこんな感じです

@helper Variables()
{
    <script language="javascript" type="text/javascript">
        var ActionGetallAdmin = '@Url.Action("GetAll", "Admin")';
        var ActionAccountLogin = '@Url.Action("Login", "Account")';
    </script>
}
于 2012-12-19T08:47:37.357 に答える
0

うーん...アクションを指す「actionsjs」のような特別なルートを定義できると思います。

routes.MapRoute(name: "actionsJs",
                url: "actionsjs",
                defaults: new { controller = "Home", action = "GetActions" });

アクションでは、コンテンツを適切なタイプに設定する必要があります。

Response.ContentType = "text/javascript";

次に、Razor を内部に含む JavaScript コードを含む特定のビューを返します。

@{
    Layout = "";
}

$(function() {
    var a = @(1 + 2);
});

この時点で、この「スクリプト ファイル」をサイトに追加できます。

<script type="text/javascript" scr="@Url.Action("GetActions", "Home")"></script>

動作するはずです。

于 2012-12-19T09:30:01.173 に答える
0

ルートパスが必要な場合は、レイアウトで変数を使用し、それを JavaScript ファイルで使用します。

// In layout view
<script>
  var rootPath = @Url.Content("~/")
</script>

rootPathアプリケーションの JavaScript ファイル内の任意のユーザー

アクションを含むコントローラーのフルパスを取得したい場合

// View
<script>
  var url = @Url.Content("ActionName", "ControllerName")
</script>

JavaScript ファイルで url を使用します。

于 2015-02-27T19:07:16.450 に答える
0

私が以前これを行った 1 つの方法は、HTML ファイルの代わりに JS ファイル (および実際には CSS ファイル) を提供するビューを作成することでした。これは、ビューが常に MVC パラダイムの HTML ファイルであるとは限らないという事実を利用しています。

そのためのコントローラーを作成することでこれを行うことができます:

public class AssetController : Controller {

    protected void SetMIME(string mimeType) {

        // implementation largely removed
        this.Response.Headers["Content-Type"] = mimeType;
        this.Response.ContentType = mimeType;
    }

    // this will render a view as a Javascript file
    public void ActionResult MyJavascript() {

        this.SetMIME("text/javascript");
        return View();
    }

}

これが完了したら、(ASP.NET MVC で通常行う方法を使用して) ビューを作成し、それを Javascript として記述するだけです。明らかにレイアウトを使用したくないので、レイアウトを使用しないことを忘れないでください。

MVC のビューが提供するものはすべて利用できるので、自由にモデルなどを使用してください。

@model IList<Entity>
@{
    Layout = null;
}

(function ($) {

    // javascript!

    @foreach(var entity in Model) {
        $('#@entity.Id').on('click', function () {
            console.log('@entity.Name');
        });
    }

})(jQuery);

次に、他のビューで昔ながらの Razor を使用して接続できます。

<script src="@Url.Action("MyJavascript","Asset")"></script>

これは次のようなものを展開します

<script src="http://your.domain/asset/myjavascript"></script>

魅力のように機能します。もちろん、ビューは動的に作成されるため、それについてうるさい場合は注意してください。ただし、これらMVC コントローラーのアクションとビューであるため、他のビューと同様にキャッシュ オプションを設定できます。

于 2012-12-19T09:28:51.090 に答える