我一直在玩自己的WebControls,并试图在不使用MS AJAX的情况下添加一些AJAX功能。我不确定将Web对象的JS对象传递给页面脚本的最佳方法。
我使用Page.ClientScript.RegisterClientScriptResource
将我的控件的JS导入浏览器,并通过服务器代码实例化JS(RenderEndTag写出调用new的<script>
):
public class SearchBox : WebControl
{
//...
public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
{
//...
writer.Write("<script type=\"text/javascript\">new SearchBox($('#" + this.ClientID + "'));</script>");
}
}
现在我需要在特定页面的JS中使用该对象(例如添加valueChanged处理程序)。我该怎么办呢?将控件ID作为键的全局数组是否有效?
答案 0 :(得分:1)
根据我对你的问题的理解,我会做这样的事情:
public class SearchBox : WebControl
{
public int SearchBoxControlId { get { return this.ClientID;}}
//...
public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
{
//...
writer.Write("<script type=\"text/javascript\">new SearchBox($('#" + this.ClientID + "'));</script>");
}
}
//Other Parent Page
<uc1:SearchBox id="ucSearchBox" runat="server" />
<script>
$("#SOMEID").change(function (e) {
var searchBox = $("#<%= ucSearchBox.SearchBoxControlId %>");
//Do stuff
});
</script>
答案 1 :(得分:1)
由于您正在使用jQuery,因此您在SearchBox的javascript构造函数中可以执行的操作之一就是:
var SearchBox = function($element) {
$element.data("searchBox", this);
}
然后你可以在以后再次从jQuery中轻松地检索它:
var sb = $("#myElement").data("searchBox");