ボタンを含む基本的な複合サーバーコントロールを作成しました。
<Custom:Class1 ID="testClass" ClientInstanceName="test1" runat="server"></Custom:Class1>
たとえば、JavaScriptを使用して子コントロールにアクセスできるようにしたいと思います。
var myButton = testClass.FindControl('btnTest');
とにかくこれを行うことはありますか?
ボタンを含む基本的な複合サーバーコントロールを作成しました。
<Custom:Class1 ID="testClass" ClientInstanceName="test1" runat="server"></Custom:Class1>
たとえば、JavaScriptを使用して子コントロールにアクセスできるようにしたいと思います。
var myButton = testClass.FindControl('btnTest');
とにかくこれを行うことはありますか?
サーバー側のコントロール(javascriptクラス)を表すクライアント側のオブジェクトを作成します。子コントロールへの参照のコレクションをクライアント側オブジェクトに配置します。次に、サーバー側のOnPreRenderイベントで、クライアント側のオブジェクトを定義するスクリプトを作成またはロードすると同時に、参照のコレクションをそのコンストラクターに渡します。
クライアント側のオブジェクト定義を含むjavascriptファイルを埋め込む方法の例(名前空間宣言の上のどこかにこれを置きます:
[assembly: WebResource("myNS.stuff.clientSideObj.js", "application/x-javascript")]
namespace myNS.stuff
{
WebResouce(OnPreRender)を登録する方法の例:
ClientScriptManager cs = this.Page.ClientScript;// Get a ClientScriptManager reference from the Page class.
Type csType = this.GetType();// Get the type from this class.
//Register an embedded JavaScript file. The JavaScript file needs to have a build action of "Embedded Resource".
String resourceName1 = "myNS.stuff.clientSideObj.js";
cs.RegisterClientScriptResource(csType, resourceName1);
クライアント側オブジェクト(OnPreRender)のインスタンスを宣言するスクリプトを作成する例:
String childControlIDsList= getChildControlList();//I am not writing this one.. just look up javascript arrays.
String uniqueScriptKey = "myKey";
StringBuilder theScript = new StringBuilder();
theScript.AppendLine("var myObj = new clientSideObj(" + childControlIDsList + ");");
theScript.AppendLine("window['myClientControl'] = myObj;") //create a client side reference to your control.
cs.RegisterStartupScript(csType, uniqueScriptKey, theScript.ToString(), true);
クライアント側のオブジェクト定義はあなたに任せます...お役に立てば幸いです。
.net 4.0を使用している場合はClientIDMode
、ボタンの''プロパティをStatic
設定してから、IDプロパティをID = "myButton"のように設定し、jqueryを使用してアクセスできます。
$("#myButton")
jqueryを使用しない場合は、次を使用できます
document.getElementById("myButton")
フォームでコントロールを複数回使用している場合は、ボタンIDの前にカスタムコントロールIDを付けることができます。カスタムコントロールのClientIDModeプロパティも静的に設定することを忘れないでください。
<asp:Button ID="<%=Me.Id%>_myButton " ClientIDMode="Static" runat="server"/>
これが良い習慣であるかどうか、またはそれが機能するかどうかは完全にはわかりませんが、試すことができます(カスタムコントロールIDを設定することを忘れないでください)
これはSharepointビジュアルWebコントロール用ですが、同じ一般的なプロセスが適用されます。
基本的に、ページの背後にあるコードで、ページのClientIdへの参照を取得し、それをjQueryセレクターに追加できるjavascript変数として公開します。
これは少しハッキーだと思いますが、仕事は完了したと思います...