3

ASP.Netコントロールがいくつかあるプロジェクトに新しいコントロールを追加しています。各コントロールは、基本的に.Netクラス(ScriptControlを継承)とjavascriptファイルで構成されます。各jsファイルはWebResourceとしてアセンブリに追加されます

[assembly: WebResource("Assembly.Namespace.WidgetControl.js", "text/javascript")]
[assembly: WebResource("Assembly.Namespace.CogControl.js", "text/javascript")]

他のコントロールの1つから別のjavascriptリソースの「クラス」から継承したいのですが、そうしないと、継承したいjsクラスの関数コードの一部をコピーして貼り付ける必要があります。 、メンテナンスのために醜い。私は重複した努力のファンではありません。

さて、私が求めているのはWebResourceのロード順序です。たとえば、説明のために、のクラスから継承し、WidgetControl.jsで拡張したいとしThingaMahBobControl.jsます。ウィジェットの後にThingaMahBobのWebResourceアセンブリ参照を追加すると、ロード順序が保証されますか?

まだロードされていないものから継承できないので、これは非常に重要です。コントロールは抽象ScriptControlを継承しているので、実装する必要がありますGetScriptReferences()。そうすれば、列挙可能な参照のコレクションを目的の順序で返すことができますか?すなわち:

protected override IEnumerable<ScriptReference> GetScriptReferences()
{
    List<ScriptReference> refs = new List<ScriptReference>();
    refs.Add(new ScriptReference("Assembly.Namespace.WidgetControl.js", this.GetType().Assembly.FullName));
    refs.Add(new ScriptReference("Assembly.Namespace.ThingaMahBobControl.js", this.GetType().Assembly.FullName));
    return refs;
}
4

1 に答える 1

2

はい、これで動作します。GetScriptReferencesで、制御に必要なスクリプト参照の完全なコレクションを指定する場合、これは機能します。注:複製されたスクリプト参照は、スクリプトマネージャーによって追加されないだけです。ただし、ここでの主なポイントは、コントロールが依存するスクリプトの完全なコレクションを指定する必要があるということです。

また、Ajax Control Toolkitでの実装方法を確認することも提案しています(または、たとえば、Telerik ASP.NET Ajax Controlsで同じアプローチが使用されています)。ClientScriptResource属性とRequiredScript属性、およびこのようなタイプの順序付けの問題を解決するのに役立つScriptObjectBuilderヘルパークラスが存在します。

于 2012-11-13T19:20:31.000 に答える