私はいくつかの javascipt を使用したいグリッド コントロールを開発しています。クラス ライブラリ プロジェクトに js ファイルを追加し、そのビルド アクションを「埋め込みリソース」に設定しました。しかし、js/jquery 関数 (js ファイルに実装) はアクセスしていません。また、その dll を使用している他のプロジェクトに含まれている js ファイルを表示できません。これを期待してすべて正常に動作しています。
助けてください。
私はいくつかの javascipt を使用したいグリッド コントロールを開発しています。クラス ライブラリ プロジェクトに js ファイルを追加し、そのビルド アクションを「埋め込みリソース」に設定しました。しかし、js/jquery 関数 (js ファイルに実装) はアクセスしていません。また、その dll を使用している他のプロジェクトに含まれている js ファイルを表示できません。これを期待してすべて正常に動作しています。
助けてください。
に Action メソッドを用意しますController
。リフレクションを使用すると、resourceName を読み取り、それを として返すことができますFileStreamResult
。ビューで、スクリプトパスを次のように追加します/Controller/Action/actualjsfile.js
次のようにテストされたサンプルの手順
クラス ライブラリ プロジェクト (JSDLL) の作成
埋め込みリソースとして追加TestJS.js
(以下に示すファイルの内容)
function MyAlert() {
alert("Hello! this is from the dll");
}
AssemblyInfo.cs に以下を追加します (System.Web.dll への参照を追加する必要があります)。
[assembly: System.Web.UI.WebResource("JSDLL.TestJS.js", "application/x-javascript")]
クラス ライブラリ プロジェクトをコンパイルし、MVC プロジェクトへの参照として追加する
コントローラーに次のアクションを追加します (ブログ投稿と同じですが、わずかな変更があります)。
public FileStreamResult ContentFile(string id)
{
string resourceName = Assembly.GetAssembly(typeof(JSDLL.Class1)).GetManifestResourceNames().ToList().FirstOrDefault(f => f.EndsWith(id));
return new FileStreamResult(Assembly.GetAssembly(typeof(JSDLL.Class1)).GetManifestResourceStream(resourceName), "text/javascript");
}
.js
テストするシンプルなビュー(ファイルがどのように参照されているかを見てください。ファイルonClick
から関数を呼び出してい.js
ます)
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
<button type="button" onclick="MyAlert()">Text</button>
</p>
<script type="text/javascript" src="/Home/ContentFile/TestJS.js"/>
出力
編集済み(マシューのコメント用)
ここにいくつかのスクリーンショットがあります
CSS/JS を DLL に埋め込みたい場合は、単にファイル名を使用するのではなく、別の方法でそれらを参照する必要があります。詳細については、 http://www.karpach.com/Custom-ASP-NET-server-control-with-embedded-resources.htmを参照してください(これは ASP.NET 2.0 用ですが、開始するためのアイデアが得られるはずです。と)。
また、これらのリソースを埋め込む必要があるかどうかについては、この [stackoverflow question] を確認してください。
「埋め込みリソース」は、js
ファイルを dll の一部にするため、他のプロジェクトで表示することはできません。
js
ファイルは JavaScript コードからのアクセスであると想定されており、dll に埋め込む必要はありません。