除了@Icarus 评论的方法之外,您还可以从您的控件中公开一个 JavaScript 函数。
如果您在其中使用您将面临的问题ClientIDMode=Static
,您将被限制alarm:SubscriptionPanel
为您的页面仅添加一个控件
如果您打算在每个页面上只使用一个控件,那么最简单的方法是 @Icarus 评论的那个,但是我认为它是一种临时方法
这个替代方案在自定义控件中封装了它真正属于的逻辑:
输出
澳交所
<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" />
我刚刚找到了另一种方式,看起来更加面向对象,但是,它需要您使用 Microsoft AJAX 库。
澳交所
改变:$("#<%: 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 函数的使用