@Icarusによってコメントされたアプローチに加えて、コントロールからJavaScript関数を公開することができます。
その中で使用する場合に直面する問題は、ページにClientIDMode=Static
1つのコントロールのみを追加するように制限されalarm:SubscriptionPanel
ます
各ページで1つのコントロールのみを使用することを計画している場合、最も簡単なアプローチは@Icarusによってコメントされたものですが、私はそれを一時的なアプローチと見なします
この代替手段は、カスタムコントロール内で、実際に属するロジックをカプセル化します。
出力
ASCX
<div id="<%: this.ClientID %>">
<asp:HiddenField runat="server" ID="hidden1" Value="one" />
<asp:HiddenField runat="server" ID="hidden2" />
<asp:Button Text="Post me" runat="server" OnClick="postme_Click" />
<asp:Label runat="server" ID="lbl"></asp:Label>
<script type="text/javascript">
$(function () {
var myObj = {
setHidden1: function (myValue) {
$("#<%: this.hidden1.ClientID %>").val(myValue);
},
getHidden1: function () {
return $("#<%: this.hidden1.ClientID %>").val();
},
helloWorld: function () {
alert("hellow world");
}
};
$("#<%: this.ClientID %>").data("data", myObj);
});
</script>
</div>
背後にあるASCXコード
protected void postme_Click(object sender, EventArgs e)
{
this.lbl.Text = "Posted: " + this.hidden1.Value;
}
ASPX
<script type="text/javascript">
$(function () {
$("#myPageButton").click(function () {
$("#<%: this.myControl.ClientID %>").data("data").setHidden1("plop");
$("#<%: this.myControl2.ClientID %>").data("data").setHidden1("plop2");
});
});
</script>
<input type="button" id="myPageButton" value="Set Hidden value" />
<uc1:EncapsulateJavaScriptLogicInUserControl ID="myControl"
runat="server" />
<uc1:EncapsulateJavaScriptLogicInUserControl ID="myControl2"
runat="server" />
<uc1:EncapsulateJavaScriptLogicInUserControl ID="myControl3"
runat="server" />
別の方法を見つけました。これはさらにオブジェクト指向に見えますが、MicrosoftAJAXライブラリを使用する必要があります。
ASCX
変化する:$("#<%: this.ClientID %>").data("data", myObj);
の中へ:$.extend($get("<%: this.ClientID %>"), myObj);
ASPX
変化する:
$("#<%: this.myControl.ClientID %>").data("data").setHidden1("plop");
$("#<%: this.myControl2.ClientID %>").data("data").setHidden1("plop2");
の中へ:
$get("<%: this.myControl.ClientID %>").setHidden1("plop");
$get("<%: this.myControl2.ClientID %>").setHidden1("plop2");
このアプローチでは、.data
jQuery関数の使用を削除します