IScriptControlインターフェイスを使用してカスタムコントロールを実装するときに、スクリプトをページにレンダリングする順序を指定するにはどうすればよいですか?それはjQueryのスクリプト参照をレンダリングする前に、jQueryUIスクリプト参照をレンダリングするためのコードは、上記の問題を作成しIScriptControl.GetScriptReferencesを実装するときにスクリプトをページにレンダリングする順序を指定するにはどうすればよいですか?
public class MyScriptControl : WebControl, IScriptControl
{
private static ConcurrentBag<ScriptReference> ScriptReferences;
static MyScriptControl()
{
ScriptReferences = new ConcurrentBag<ScriptReference>
{
new ScriptReference { Name = "jquery" },
new ScriptReference { Name = "jquery-ui" },
new ScriptReference { Name = "myscriptcontrol" }
};
ScriptManager.ScriptResourceMapping.AddDefinition("myscriptcontrol",
new ScriptResourceDefinition
{
ResourceAssembly = Assembly.GetCallingAssembly(),
ResourceName = "Path.To.Scripts.myscriptcontrol.js"
}
);
}
public MyScriptControl()
{ }
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
ScriptManager.GetCurrent(Page)
.RegisterScriptControl<MyScriptControl>(this);
}
protected override void Render(HtmlTextWriter writer)
{
// Render UI
}
public IEnumerable<ScriptReference> GetScriptReferences()
{
foreach (var reference in ScriptReferences)
{
yield return reference;
}
}
public IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
return new ScriptDescriptor[] { };
}
}
:
は、ここで私がやっているものの例です。私は順序を変更する場合は、スクリプトが正しい順序でレンダリング:
ScriptReferences = new ConcurrentBag<ScriptReference>
{
new ScriptReference { Name = "myscriptcontrol" },
new ScriptReference { Name = "jquery-ui" },
new ScriptReference { Name = "jquery" }
};
これは、単一の制御のための素晴らしいですが、私はjQueryのか、他のライブラリに依存しているだろうそのうちのいくつかは、内部統制の数十を、開発していますどのようなコントロールの組み合わせがページにレンダリングされても、依存関係の問題を避けるために、スクリプト参照が正しい順序でレンダリングされていることを確認したい。
依存するスクリプトの順序を指定する方法を理解するだけでなく、ここに表示されている悪い方法や問題のコードを自由に取り除くことができます。
また、あなたはあなたのリソースとして含まれるの埋込みやDLLとしてあなたのコントロールをコンパイル検討すべきです。これにより、サーバーはリソースハンドラashxを使用できるようになり、リソースハンドラによって管理される1つのダウンロードにスクリプトを組み合わせることができます。 –