MVC4を使用しています。
私の見解では、@Url.Action を使用してアクションの URL を簡単に取得できます。
ビューにすべてを書き込むのではなく、すべてのビューのjavascriptを含むjavascriptファイルを作成したかったのですが、問題は、かみそりのものをもう使用できないことです。
私の質問は、javascript で区切られたファイルからアクションの URL を取得するにはどうすればよいですか?
MVC4を使用しています。
私の見解では、@Url.Action を使用してアクションの URL を簡単に取得できます。
ビューにすべてを書き込むのではなく、すべてのビューのjavascriptを含むjavascriptファイルを作成したかったのですが、問題は、かみそりのものをもう使用できないことです。
私の質問は、javascript で区切られたファイルからアクションの URL を取得するにはどうすればよいですか?
スクリプトで使用できるように、ビュー内で 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>
}
うーん...アクションを指す「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>
動作するはずです。
ルートパスが必要な場合は、レイアウトで変数を使用し、それを JavaScript ファイルで使用します。
// In layout view
<script>
var rootPath = @Url.Content("~/")
</script>
rootPath
アプリケーションの JavaScript ファイル内の任意のユーザー
アクションを含むコントローラーのフルパスを取得したい場合
// View
<script>
var url = @Url.Content("ActionName", "ControllerName")
</script>
JavaScript ファイルで url を使用します。
私が以前これを行った 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 コントローラーのアクションとビューであるため、他のビューと同様にキャッシュ オプションを設定できます。