バンドルが既にロードされているかどうかを追跡する組み込みの方法はありますか? たとえば、jquery および jquery.Validate などのライブラリを必要とするいくつかの編集ビューがあります。メインレイアウトページで参照する必要はありません。ページはいくつかの異なる条件付きライブラリで構成されている可能性があるため...理想的には、@scripts.Render に、既にライブラリを参照しているかどうかを認識させ、そのリロードを防止したいと考えています。
乾杯ティム
バンドルが既にロードされているかどうかを追跡する組み込みの方法はありますか? たとえば、jquery および jquery.Validate などのライブラリを必要とするいくつかの編集ビューがあります。メインレイアウトページで参照する必要はありません。ページはいくつかの異なる条件付きライブラリで構成されている可能性があるため...理想的には、@scripts.Render に、既にライブラリを参照しているかどうかを認識させ、そのリロードを防止したいと考えています。
乾杯ティム
Hao Kungとuser108の両方があなたの答えを持っていると思います。
Hao Kung は、ページに既にバンドルが含まれていることを認識し、重複を追加しないようにするシステムの機能に取り組んでいます。これは、 WordPress のエンキュー スクリプト/スタイルと似ています。MVC にはまだこれがありません。自分でビルドする必要があります。
user108 は、あなたの問題に対する可能な解決策を提示しています。彼/彼女は、レイアウトでオプションの「スクリプト」セクションを作成できると言っています。次に、jquery 検証コードを必要とするビューで、レイアウトの「スクリプト」セクションに含めることができます。これにより、探しているもののほとんどが達成されます。機能しない唯一の場所は、同じページに複数のビュー パーシャルがあり、そのすべてが jquery 検証コードを必要とする場合です。
これに対する解決策を自分でかなり簡単に実装できます。これがあなたを始めるためのSO投稿です。
スクリプトを複数回登録できる可能性のある資産管理のようなものと、適切なリストを自動的に重複排除してレンダリングする API を求めているようです。これは todo リストにありますが、現時点ではまだ API の一部ではありません。
これが気に入った場合は、codeplex サイトで投票できます: この問題
これを試して:
public static MvcHtmlString RequireClientScript(this HtmlHelper helper, string scriptPath)
{
var scripts = helper.ViewContext.HttpContext.Items["client-script-list"] as Dictionary<string, string> ?? new Dictionary<string, string>();
if (!scripts.ContainsKey(scriptPath))
{
var sb = new StringBuilder();
var scriptTag = new TagBuilder("script");
scriptTag.Attributes.Add("type", "text/javascript");
scriptTag.Attributes.Add("src", scriptPath);
sb.AppendLine(scriptTag.ToString());
scripts.Add(scriptPath, scriptPath);
helper.ViewContext.HttpContext.Items["client-script-list"] = scripts;
return new MvcHtmlString(sb.ToString());
}
return MvcHtmlString.Empty;
}
部分ビューを使用している場合は、参照スクリプトライブラリが必要でした
ページ上部に必要なスクリプトのみを追加する
@Scripts.Render("~/bundles/jquery")
次に、本文タグの下部を追加します
@RenderSection("scripts", required: false)
他のページ拡張スクリプトセクションのような
@section scripts{
<script src="/Scripts/jquery.validation.js" type="text/javascript"></script>
}